[C#] WSDL Web Service consumen in .NET

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Ik heb een Web Service die via een .wsdl file zaken uit SAP ophaalt. WSDL bestand in kwestie ziet er als volgt uit:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="Customer_Out" targetNamespace="..." xmlns:p1="...." xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:documentation/>
    <wsp:UsingPolicy wsdl:required="true"/>
    <wsp:Policy wsu:Id="OP_CustomerRead_sync"/>
    <wsdl:types>
        <xsd:schema targetNamespace="..." xmlns="..." xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:element name="MT_CustomerRead_response" type="DT_CustomerRead_response"/>
            <xsd:element name="FMT_Customer">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="standard" type="ExchangeFaultData"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="MT_CustomerRead_request" type="DT_CustomerRead_request"/>
            <xsd:complexType name="ExchangeFaultData">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/VersionID">..</xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="faultText" type="xsd:string"/>
                    <xsd:element name="faultUrl" type="xsd:string" minOccurs="0"/>
                    <xsd:element name="faultDetail" type="ExchangeLogData" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="DT_Customer">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/VersionID">...</xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="BpId" type="xsd:string">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Name" type="xsd:string">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="AccountGroup" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Street" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Number" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="City" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Country" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Region" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="DT_CustomerRead_request">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/VersionID">...</xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="RowLimit" type="xsd:integer"/>
                    <xsd:element name="BpId" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:string">
                                <xsd:maxLength value="10"/>
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="Name" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="ExternalCustomer" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="AccountGroup" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="ExchangeLogData">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/VersionID">...</xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="severity" type="xsd:string" minOccurs="0"/>
                    <xsd:element name="text" type="xsd:string"/>
                    <xsd:element name="url" type="xsd:string" minOccurs="0"/>
                    <xsd:element name="id" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="DT_CustomerRead_response">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/VersionID">...</xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="Customer" type="DT_Customer" minOccurs="0" maxOccurs="unbounded">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Remark" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="MT_CustomerRead_request">
        <wsdl:documentation/>
        <wsdl:part name="MT_CustomerRead_request" element="p1:MT_CustomerRead_request"/>
    </wsdl:message>
    <wsdl:message name="MT_CustomerRead_response">
        <wsdl:documentation/>
        <wsdl:part name="MT_CustomerRead_response" element="p1:MT_CustomerRead_response"/>
    </wsdl:message>
    <wsdl:message name="FMT_Customer">
        <wsdl:documentation/>
        <wsdl:part name="FMT_Customer" element="p1:FMT_Customer"/>
    </wsdl:message>
    <wsdl:portType name="Customer_Out">
        <wsdl:documentation/>
        <wsdl:operation name="CustomerRead_sync">
            <wsdl:documentation/>
            <wsp:Policy>
                <wsp:PolicyReference URI="#OP_CustomerRead_sync"/>
            </wsp:Policy>
            <wsdl:input message="p1:MT_CustomerRead_request"/>
            <wsdl:output message="p1:MT_CustomerRead_response"/>
            <wsdl:fault name="FMT_Customer" message="p1:FMT_Customer"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="Customer_OutBinding" type="p1:Customer_Out">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
        <wsdl:operation name="CustomerRead_sync">
            <soap:operation soapAction="http://sap.com/xi/WebService/soap1.1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
            <wsdl:input>
                <soap:body use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
            </wsdl:output>
            <wsdl:fault name="FMT_Customer">
                <soap:fault use="literal" name="FMT_Customer" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="Customer_OutService">
        <wsdl:port name="HTTP_Port" binding="p1:Customer_OutBinding">
            <soap:address location="..." xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
        </wsdl:port>        
    </wsdl:service>
</wsdl:definitions>


Een bijhorende request ziet er als volgt uit

XML:
1
2
3
4
5
6
7
8
9
10
  <man:MT_CustomerRead_request>
         <RowLimit>100</RowLimit>
         <!--Optional:-->
         <!-- <CustomerId>?
         <!--Optional:-->
         <Name>Dell*</Name>
         <!--Optional:-->
         <!--Optional:-->
         <AccountGroup>ABC</AccountGroup>
</man:MT_CustomerRead_request>


Ik heb in mijn .NET project een Service Reference toegevoegd. Vervolgens zijn er tal van klasses waar ik een instantie kan van aanmaken.

Ik vind echter niet hoe ik de request kan doorgeven, en de daarop volgende response kan ophalen. Dien ik alles te parsen om zo de informatie van de request en response bruikbaar te maken? Nu zit deze namelijk tussen tags "verstopt"? Ik heb reeds volgende tutorial gevonden maar loop wat vast.

Zie ik iets over het hoofd, heb ik een totaal verkeerde aanpak?

.

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 10:37
Ergens in je gegenereerde code moet ook een client zitten als het goed is.

[ Voor 3% gewijzigd door sig69 op 17-11-2015 22:59 ]

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
sig69 schreef op dinsdag 17 november 2015 @ 22:59:
Ergens in je gegenereerde code moet ook een client zitten als het goed is.
Bedoel je in de namespace die gegenereerd wordt na het importeren van de web service? Naast de request en response klasses is er ook één klasse die alle attributen weergeeft.

Ik zie geen echte client.

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 11-10 10:35
Even vanuitgaande dat je een WCF service reference gebruikt en niet de oude meuk.
Zoek naar een class welke van ClientBase<> erft.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08:00

Haan

dotnetter

Bij een WCF service reference verwacht ik iets van een Customer_OutServiceClient waar een CustomerRead method op zit waaraan je je request object mee kan geven.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Haan schreef op woensdag 18 november 2015 @ 08:57:
Bij een WCF service reference verwacht ik iets van een Customer_OutServiceClient waar een CustomerRead method op zit waaraan je je request object mee kan geven.
Eén van deze dus?

XML:
1
2
3
4
5
6
7
8
9
10
11
12
    <wsdl:portType name="Customer_Out">
        <wsdl:documentation/>
        <wsdl:operation name="CustomerRead_sync">
            <wsdl:documentation/>
            <wsp:Policy>
                <wsp:PolicyReference URI="#OP_CustomerRead_sync"/>
            </wsp:Policy>
            <wsdl:input message="p1:MT_CustomerRead_request"/>
            <wsdl:output message="p1:MT_CustomerRead_response"/>
            <wsdl:fault name="FMT_Customer" message="p1:FMT_Customer"/>
        </wsdl:operation>
    </wsdl:portType>


XML:
1
2
3
4
5
        <wsdl:service name="Customer_OutService">
        <wsdl:port name="HTTP_Port" binding="p1:Customer_OutBinding">
            <soap:address location="..." xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
        </wsdl:port>        
    </wsdl:service>

Acties:
  • 0 Henk 'm!

  • FeronIT
  • Registratie: Mei 2015
  • Laatst online: 09-10 21:00
Post de gegenereerde code eens, waarschijnlijk kunnen we je dan beter helpen

  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
FeronIT schreef op woensdag 18 november 2015 @ 22:25:
Post de gegenereerde code eens, waarschijnlijk kunnen we je dan beter helpen
Gegenereerde code :?

Na het toevoegen van de service reference wordt er enkel een Namespace toevoegd (zelf gekozen naam). Vervolgens zijn er binnen die namespace een aantal klasses waarvan ik een instantie kan aanmaken:
  • DT_Customer
  • DT_CustomerRead_request
  • DT_CustomerRead_response
  • ExchangeFaultData
  • ExchangeLogData
  • FMT_Customer
  • CustomerRead_syncRequest
  • CustomerRead_syncResponse
  • Customer_OutClient
Alsook 2 interfaces:
  • Customer_Out
  • Customer_OutChannel
Ik zie geen .cs files in mijn project, bovenstaande naamgevingen verschijnen maw allemaal wanneer ik de namespace aanroep.

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 10-10 17:12

BoAC

Memento mori

Als je dubbelklikt op die gegenereerde service zie je een complete objectenstructuur als het goed is. Daar zit ook een client bij die je kunt instantieren. Die client heeft dan de methods die je service als operaties aanbiedt. Vandaaruit zou ik verder werken :)

Maak dus een object aan van het type: Customer_OutClient. Die heeft methods die je kunt aanroepen. In je app.config/web.config is als het goed is de end-point vastgelegd waarmee je communiceert.

Ow ja, een namespace roep je niet aan ;)

[ Voor 31% gewijzigd door BoAC op 19-11-2015 08:04 ]


  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
In die Object browser zie ik inderdaad alle attributen, getters/setters, etc.

Ik versta echter niet op welke manier ik een request verstuur en vervolgens de respons moet ontvangen aangezien deze toch verstuurd en respectievelijk ontvangen worden in SOAP formaat, met header en body etc? Of zie ik dit nu vollledig verkeerd?

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 10-10 17:12

BoAC

Memento mori

Die vertaling naar SOAP formaat wordt voor je gedaan. Jij gebruikt gewoon de objecten die aangeboden worden bij de aanroep van de functie. In je C# code heb je niets te maken met WebService calls :)

Simpel voorbeeldje (geen rekening gehouden met jouw classen ;))
C#:
1
2
3
4
5
6
7
8
9
10
11
12
private void Call_Web_Service_Method()
{
    Customer_OutClient CallWebService = 
        new Customer_OutClient();
    InputParam param = new InputParam() 
    {
        prop1 = value,
        prop2 = value2,
    };
    ReturnObject sGetValue = CallWebService.MethodName(param);
    Label1.Text = sGetValue.prop;
}

[ Voor 51% gewijzigd door BoAC op 19-11-2015 08:28 ]


  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Dat verklaart al een hoop. Thanks :)

Ik vind het alleen wat moeilijk om de vele klasses te ontcijferen. De web service zoekt eerst de naam van een Customer, daar is DT_CustomerRead_request voor verantwoordelijk denk ik. SOAP request ziet er als volgt uit:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:man="...">
   <soapenv:Header/>
   <soapenv:Body>
      <man:MT_CustomerRead_request>
         <RowLimit>?</RowLimit>
         <!--Optional:-->
         <BpId>?</BpId>
         <!--Optional:-->
         <Name>*naam van customer hier*</Name>
         <!--Optional:-->
         <AccountGroup>...</AccountGroup>
      </man:MT_CustomerRead_request>
   </soapenv:Body>
</soapenv:Envelope>


Eénmaal er een klant is geselecteerd zou ik alle eigenschappen moeten kunnen opvragen via het Customer datatype denk ik

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<xsd:complexType name="DT_Customer">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/VersionID">...</xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="BpId" type="xsd:string">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Name" type="xsd:string">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="AccountGroup" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Street" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Number" type="xsd:string" minOccurs="0">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">...</xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>


Dus ik verstuur de eerste request door een object te maken van DT_CustomerRead_request. Daarna de respons van deze request ophalen door een object te maken van DT_CustomerRead_response?

Aan de hand van wat ik terug krijg van de request, alles gaan uitlezen via een object van DT_Customer?

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08:00

Haan

dotnetter

Wat al gezegd is, vergeet die wsdl en kijk gewoon naar de classes die zijn gegenereerd, het voorbeeld van BoAC is daarbij goed bruikbaar.
Visual Studio helpt je al enorm met IntelliSense, waardoor je eigenlijk automatisch ziet welke methods die Customer_OutClient heeft en wat er voor objecten in en uit gaan.

Kater? Eerst water, de rest komt later


  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Haan schreef op donderdag 19 november 2015 @ 11:31:
Wat al gezegd is, vergeet die wsdl en kijk gewoon naar de classes die zijn gegenereerd, het voorbeeld van BoAC is daarbij goed bruikbaar.
Visual Studio helpt je al enorm met IntelliSense, waardoor je eigenlijk automatisch ziet welke methods die Customer_OutClient heeft en wat er voor objecten in en uit gaan.
Helaas is het iets complexer dan dat. Zie onderstaande code:
Ik heb in SoapUI de webservice wat uitgetest: de request bestaat eigenlijk uit een search string.Vervolgens bestaat de response uit een lijst van customers met alle attributen van die customer.

Ik heb dus inderdaad ook een DT_CustomerRead_response en een Customer_OutClient maar weet niet goed hoe ik ermee aan de slag moet.

Mijn code so far:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
// 1. construct request 
DT_CustomerRead_request request = new DT_CustomerRead_request();
request.RowLimit = "100";           //default
request.Name = "Janssens";          // user input: Search for specific Customer
request.AccountGroup = "ZMNF";      //default
 /* send request (?)*/

// 2. receive response()
/* receive list of Customers + attributes... */

// 3. extract values from  selected datatype
...

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08:00

Haan

dotnetter

SanderH_ schreef op donderdag 19 november 2015 @ 13:38:
[...]


Helaas is het iets complexer dan dat. Zie onderstaande code:
Ik heb in SoapUI de webservice wat uitgetest: de request bestaat eigenlijk uit een search string.Vervolgens bestaat de response uit een lijst van customers met alle attributen van die customer.

Ik heb dus inderdaad ook een DT_CustomerRead_response en een Customer_OutClient maar weet niet goed hoe ik ermee aan de slag moet.

Mijn code so far:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
// 1. construct request 
DT_CustomerRead_request request = new DT_CustomerRead_request();
request.RowLimit = "100";           //default
request.Name = "Janssens";          // user input: Search for specific Customer
request.AccountGroup = "ZMNF";      //default
 /* send request (?)*/

// 2. receive response()
/* receive list of Customers + attributes... */

// 3. extract values from  selected datatype
...
Nee het is niet complexer ;)
je bent er bijna:
C#:
1
2
3
4
// 1 construct request (zie hierboven)
// 2 send request
var client = new Customer_OutClient();
DT_CustomerRead_response  response = client.CustomerRead(request);

Kater? Eerst water, de rest komt later


  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Haan schreef op donderdag 19 november 2015 @ 13:51:
[...]

Nee het is niet complexer ;)
je bent er bijna:
C#:
1
2
3
4
// 1 construct request (zie hierboven)
// 2 send request
var client = new Customer_OutClient();
DT_CustomerRead_response  response = client.CustomerRead(request);
Zou normaal moeten werken maar nu kom ik in de problemen met authenticatie. Ik dacht dat éénmaal je de Service reference had toegevoegd hij de authenicatie opslaat (aangezien hij expliciet op user & pw vraagt bij het aanmaken ervan). Blijkbaar niet.

Is het de bedoeling dat ik zelf ga goochelen met ClientCredentials, EndpointAddress en zelfs nog een Uri opgeef met de link naar de Webservice?

Code die ik nu heb:

C#:
1
2
3
4
5
6
7
8
9
10
11
Customer_OutClient client = new Customer_OutClient();
client.Open();

DT_CustomerRead_request request = new DT_CustomerRead_request();
request.RowLimit = "100";           
request.Name = "userinput hier";          
request.AccountGroup = "ZMNF";      

DT_CustomerRead_response response = client.CustomerRead_sync(request);
client.Close();
return response.ToString();

  • Cloud
  • Registratie: November 2001
  • Laatst online: 07-10 14:42

Cloud

FP ProMod

Ex-moderatie mobster

Je zult hoogstwaarschijnlijk wel de authenticatie moeten doen ja. Dat hij het vraagt bij de aanmaak van de service reference is waarschijnlijk omdat hij anders niet bij de wdsl kon komen. Bij daadwerkelijke requests moet je je dan ook gewoon authenticeren.

Ik zou ze stap voor stap toevoegen om te kijken wanneer hij wel werkt, om te beginnen met credentials. En dan gewoon kijken naar de foutmelding die je terugkrijgt van de service.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Geen problemen met authenticatie meer, maar nu is de response null :X :


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            Customer_OutClient client = new Customer_OutClient();
            client.ClientCredentials.UserName.UserName = "...";
            client.ClientCredentials.UserName.Password = "...";
            client.Open();

            DT_CustomerRead_request request = new DT_CustomerRead_request();
            request.RowLimit = "100";           //default
            request.Name = "Master";          // user input: Search for specific Customer
            request.AccountGroup = "ZMNF";      //default

            DT_CustomerRead_response response = client.CustomerRead_sync(request);
            System.Diagnostics.Trace.WriteLine("******* RESPONSE ******* ");
            System.Diagnostics.Trace.WriteLine(response.ToString());
            System.Diagnostics.Trace.WriteLine("******* RESPONSE ******* ");
            client.Close();


Breakpoint geplaatst en request ziet er goed uit.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08:00

Haan

dotnetter

Is er geen mogelijkheid om aan de webservice kant te (laten) checken wat er met je request gebeurt? Misschien dat daar e.e.a. gelogd wordt?
Ik vermoed dat je authenticatie nog niet klopt, dat is soms wat gepiel om uit te vinden hoe je dat in moet stellen (er zijn namelijk nog wat andere varianten dan wat je nu hebt )

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 06-10 15:48
Code was inderdaad correct, de fout zat hem in het endpoint die naar de verkeerde server verwees :F

Hartelijk dank iedereen, vooral Haan en BoAc _/-\o_
Pagina: 1