Avatar billede anders_cp Nybegynder
25. juli 2010 - 21:32 Der er 9 kommentarer og
1 løsning

Webservicekald

Hejsa
Jeg har lavet to nøjagtig ens webservices, som ligger to forskellige steder. Men mærkeligt nok er det kun den ene som bliver kaldt.

Jeg har desuden forsøgt at ændre namespacet på den ene af dem uden held.

Er det god eller dårlig programmeringskik at have flere webservices? Eller skal man nøjes med en webservice til hele web-projektet?

Og hvorfor virker det ikke med den ene af de to jeg har lavet?

1) - som IKKE virker
Stinavn:
ServicePath= "~/Intranet/WebServiceServiceBulletin.asmx"
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
using System.ComponentModel;

namespace ServicePartner.Website.Intranet
{
    /// <summary>
    /// Summary description for WebServiceServiceBulletin
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class WebServiceServiceBulletin : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }



        public List<string> getPartlist(string prefixtext, short selected)
        {
            ServicePartner.Logic.Parts2 parts = new ServicePartner.Logic.Parts2();
            List<string> list = parts.getPartlist(prefixtext, selected);
            parts = null;

            return list;
        }




        [WebMethod]
        // SelectVariable 2: Partnumber
        public string[] GetPartnumberList(string prefixText, int count)
        {
            if (count == 0)
            {
                count = 10;
            }
            List<string> items = new List<string>(count);
            items = getPartlist(prefixText, 2);
            items.Sort();
            return items.ToArray();
        }

        // SelectVariable 3: Partname
        [WebMethod]
        public string[] GetPartNameList(string prefixText, int count)
        {
            if (count == 0)
            {
                count = 10;
            }
            List<string> items = new List<string>(count);
            items = getPartlist(prefixText, 3);
            items.Sort();
            return items.ToArray();
        }
    }
}


og nr. 2 - som virker
Stinavn:
ServicePath="~/Admin/SPpartners/WebServiceParts.asmx"

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
using System.ComponentModel;

namespace ServicePartner.Website.Admin.SPpartners
{
    /// <summary>
    /// Summary description for WebServiceParts
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.Web.Script.Services.ScriptService]
    [ToolboxItem(false)]
    public class WebServiceParts : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }


        [WebMethod]
        // SelectVariable 2: Partnumber
        public string[] GetPartnumberList(string prefixText, int count)
        {
            if (count == 0)
            {
                count = 10;
            }
            List<string> items = new List<string>(count);
            items = getPartlist(prefixText, 2);
            items.Sort();
            return items.ToArray();
        }

        // SelectVariable 3: Partname
        [WebMethod]
        public string[] GetPartNameList(string prefixText, int count)
        {
            if (count == 0)
            {
                count = 10;
            }
            List<string> items = new List<string>(count);
            items = getPartlist(prefixText, 3);
            items.Sort();
            return items.ToArray();
        }


        public List<string> getPartlist(string prefixtext, short selected)
        {
            ServicePartner.Logic.Parts2 parts = new ServicePartner.Logic.Parts2();
            List<string> list = parts.getPartlist(prefixtext,selected);
            parts = null;

            return list;
        }
    }
}


Her er aspx-filen, hvor ServicePath kun virker for
ServicePath="~/Admin/SPpartners/WebServiceParts.asmx"


<%@ Register TagPrefix="uc1" TagName="SectionMenu" Src="~/SectionMenu.ascx" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<%@ Page Language="C#" MasterPageFile="~/Intranet.Master" AutoEventWireup="false" Title="Servicebulletiner"
CodeBehind="ServiceBulletins.aspx.cs" Inherits="ServicePartner.Website.Intranet.ServiceBulletins" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <table id="Table1" height="90%" cellspacing="0" cellpadding="0" width="100%" border="0">
    <tr>
        <td width="190px">
            <div class="TaskPad">
                <uc1:SectionMenu ID="SectionMenu1" runat="server" ParentMenuID="3" />
            </div>
        </td>
        <td valign="top" align="left">
            <div class="Content">
                <h1><asp:Label ID="LabelHeader" runat="server">Servicebulletiner</asp:Label></h1>
                <div style="margin-left: 30px">
                    <div class="ContentAction">
                        <div style="margin-bottom:30px;">
                        Find servicebulletin
                        </div>
                        <table border="0">
                        <tr>
                            <td width="100px">
                                Søg efter ..
                            </td>
                            <td>
                                <asp:UpdatePanel ID="UpdatePanelTextBoxSearch" UpdateMode="Always" runat="server">

                                <ContentTemplate>
                                    <asp:TextBox ID="TextBoxSearch" ToolTip="Søg på servicebulletiner" runat="server"
                                        Width="250px" AutoPostBack="true" OnTextChanged="TextBoxSearch_TextChanged"></asp:TextBox>
                                    <cc1:AutoCompleteExtender
                                        ID="AutoCompleteExtenderService"
                                        TargetControlID="TextBoxSearch"
                                        ServicePath= "~/Intranet/WebServiceServiceBulletin.asmx"
                                        ServiceMethod="GetPartNameList"
                                        MinimumPrefixLength="2"
                                        CompletionInterval="10"
                                        EnableCaching="true"
                                        CompletionSetCount="10"
                                        runat="server">
                                    </cc1:AutoCompleteExtender>
                                </ContentTemplate>
                                </asp:UpdatePanel>
                            </td>
                        </tr>
                        </table>
                    </div>
                </div>
            </div>
        </td>
    </tr>
    </table>
</asp:Content>
Avatar billede Syska Mester
25. juli 2010 - 21:57 #1
Tja, svært at sige hvad der er glat, du kan jo nemt have flere webservices ...

Så jeg vil mene du måske har tastet en sti forkert ... så den kalder noget forkert.

Har du prøvet at køre det i debug mode ? og se om du kommer ind i din webservice når du kalder den direkte ?

har du prøvet med fiddler/firebug for at se om URL findes ?

Hvad har du prøvet, synes vi mangler lidt mere information, for der burde ikke være noget galt. Virker den ene virker den anden vel også ... :-)

mvh
Avatar billede arne_v Ekspert
25. juli 2010 - 22:20 #2
En beskrivelse af hvad fejeln er kunne måske hjælpe fejlsøgningen !
Avatar billede anders_cp Nybegynder
26. juli 2010 - 11:30 #3
Jeg har fundet løsningen. Mine to webservices var IKKE ens (som jeg ellers skrev). Der manglede følgende:

System.Web.Script.Services.ScriptService
http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptserviceattribute.aspx
(To invoke a Web service method from ECMAScript (JavaScript), you must apply the ScriptServiceAttribute attribute to the related Web service class. )

Jeg ved ikke helt hvordan jeg skulle debugge (men vil mægtig gerne have en forklaring (og der vil blive givet point :-)):
Jeg bruger Visual Studio 2005 (så det er en gammel svend)
Jeg har indsat breakpoints ved webservicens funktioner, og så dermed at webservicen ikke blev kaldt. Hvad skal jeg ellers gøre? Er det muligt at se hvilket stinavn/webservice at aspx-filen kalder?

Hvis der er for omstændeligt at forklare mig, vil et link også være velkomment ;)
Avatar billede Syska Mester
26. juli 2010 - 12:21 #4
Ja, Firebug/Fiddler ... og der er massere af tut på nettet hvordan man bruger begge tools.

mvh
Avatar billede Syska Mester
26. juli 2010 - 12:22 #5
Eller ... ved faktisk ik' om Fiddler har en til JS, men det har Firebug.
Avatar billede Syska Mester
26. juli 2010 - 12:23 #6
og så forstår jeg ikke hvordan overstående kunne hjælpe dig, hvis du sagde den ene service virkede men den anden ikke gjorde.

Da dine 2 eksempler var mer eller mindre ens, men i forskellige namespaces. Så der må have været mere galt :-)
Avatar billede anders_cp Nybegynder
26. juli 2010 - 13:07 #7
Firebug har jeg leget lidt med, men den hjemmeside/Intranet jeg arbejder på har jeg overtaget, og opfylder ikke standarderne, så jeg har opgivet at få den til at virker i Firefox (!) (når jeg laver noget i privaten er det ikke samme sjusk).

Men tak for reminderen, vil lege lidt med firebug på mine andre projekter ;)

Jeg prøvede både med samme og ikke-samme namespace. Nu, hvor det virker, er begge namespaces ens.
Avatar billede Syska Mester
26. juli 2010 - 14:43 #8
Ja, men så er der jo heller intet der har virket før, da den Attribute skal på.

Mener også der findes Firebug til IE: http://getfirebug.com/firebuglite

mvh og svar hvis du kunne bruge noget af det.
Avatar billede Syska Mester
26. juli 2010 - 14:43 #9
svar
Avatar billede anders_cp Nybegynder
26. juli 2010 - 21:46 #10
Takker ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester