[C# 2.0] Probleem consumeren webservice

Pagina: 1
Acties:
  • 329 views sinds 30-01-2008
  • Reageer

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Ik ben bezig met een klein onderzoekje om een gateway te benaderen. Deze gateway is een TomCat 5.5 met Hermes Gateway 2.0.

Normaal gesproken kom je via UDDI bij een WSDL. De UDDI is er niet, maar de WSDL kan wel worden verkregen door http://localhost:8080/corvus/httpd/ebms/sender?wsdl te versturen.

Nadat ik de WSDL te pakken heb, probeer ik een proxy te genereren door Visual Studio 2005. Er zou een operatie "Request" te zien moeten zijn maar deze wordt niet gegenereerd.

Ik heb wat zitten rondneuzen in Google Groups; volgens mij heeft de webservice geen getypeerde ingang, maar kun je gewoon een SOAP envelop sturen naar http://localhost:8080/corvus/httpd/ebms/sender.

Dit vertelt de documentatie:

following request SOAP message, we assume that the content elements under SOAP
Body have the namespace URI http://service.ebms.edi.cecid.hku.hk/:

<SOAP-ENV:Body>
<cpaId>…</cpaId>
<service>…<service >
<action>…</action>
<convId>…<convId>
<fromPartyId>…</fromPartyId>
<fromPartyType>…</fromPartyType>
<toPartyId>…</toPartyId>
<toPartyType>…</toPartyType>
<refToMessageId>…</refToMessageId>
</ SOAP-ENV:Body>


Mijn vragen:

1) Is dit een gebruikelijke manier van consumeren van webservices ?
2) Kan ik een soap bericht zo maar naar het bovenstaande adres sturen ?

ps: mijn kennis op het gebied van webservices en SOAP is niet zo groot, dus niet vlammen he ;)

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 22:29
Simpel?
1) Ja
2) Ja


Een webservice call is niets meer dan een HTTP/POST request naar een webservice, met een SOAPAction in de HTTP-Header, en nog de data die in de vorm van een SOAP message verpakt zit. (SOAP is niet veel meer dan een Header en een Body)

Hieronder is een voorbeeld van een SOAP request. Eerst zie je dus de HTTP-Header, Daaronder de data in XML verpakt in een SOAP-Message. Als ik dit opstuur naar mijn webservice werkt dit en krijg ik de nodige response. (in mijn geval geen omdat het een "void" is)
Dit is dus niet veel meer dan wat een gewone browser ook kan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /TrackingWebService/TrackingWebService.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: ?????
SOAPAction: "http://localhost.com/Tracking/UpdatePosition"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <UpdatePosition xmlns="http://localhost.com/Tracking">
      <request>
        <Name>?????</Name>
        <GpsData>?????</GpsData>
      </request>
    </UpdatePosition>
  </soap:Body>
</soap:Envelope>


Iets lastiger is een WSDL. Met de WSDL kan je inderdaad de code genereren als alles goed zit. Uddi heb je niet van doen. Het probleem is dat er nogal wat problemen zitten tussen Java en .Net (ik vermoed althans dat je een Java Webservice hebt). Als de WSDL die TomCat genereert een tikkeltje anders is dan wat .Net verwacht, zal je met VS geen code kunnen genereren.
Ik ken zelf ook heel weinig van de interoperabiliteit tussen Java en .Net met SOAP, maar heel misschien weet ik iets meer als je de WSDL post.

Probeer anders zelf de code te typen ahv een voorbeeld van een webserice die je in .Net gemaakt hebt. Haal er ook een HTTP-Debugging Proxy bij zoals fiddler. Hoewel die in sommige gevallen ook niet goed mee werkt. Anders zullen het nog grovere middelen worden met bijv. WireShark

Succes iig

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
In een eerdere topic had ik aangegeven problemen te hebben met het maken van een proxy via WSDL. Nu wil ik zelf een soap bericht versturen naar deze webservice, maar dan "anoniem", dus rechtstreeks naar een URL.

Hoe kan ik dit het beste aanpakken; ik weet alleen de destination URL en het SOAP formaat?

(ps: ik was begonnnen met het aanmaken van een SoapClientMessage, maar kom dan niet verder)

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 22:29
Je kan niet een SOAP-message niet naar een url versturen en het gaat ook altijd rechtstreeks (tenzij er een proxy in het spel is, maar dan stuur je rechtstreeks naar de url van die proxy). Dus ik snap je probleem niet zo goed.

Anoniem en URL hebben niets met elkaar te maken. Je zult ook ALTIJD een WSDL nodig hebben, want in een SOAP definitie staat echt niets nuttigs.

Je zult toch een beetje duidelijker moeten zijn.

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Vedett. schreef op maandag 16 juli 2007 @ 13:11:
Je kan niet een SOAP-message niet naar een url versturen en het gaat ook altijd rechtstreeks (tenzij er een proxy in het spel is, maar dan stuur je rechtstreeks naar de url van die proxy). Dus ik snap je probleem niet zo goed.

Anoniem en URL hebben niets met elkaar te maken. Je zult ook ALTIJD een WSDL nodig hebben, want in een SOAP definitie staat echt niets nuttigs.

Je zult toch een beetje duidelijker moeten zijn.
Ik post ff de WSDL hier, als ik een proxy laat genereren krijg ik de foutmelding "// CODEGEN: The operation binding 'Request' from namespace 'http://service.ebms.edi.cecid.hku.hk/' was ignored. Specifying a type for use=literal messages is not supported."

Dit is de WSDL
code:
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
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:p="http://service.ebms.edi.cecid.hku.hk/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://service.ebms.edi.cecid.hku.hk/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types />
  <message name="EbmsRequestMsg">
    <part name="cpaId" type="s:string" />
    <part name="service" type="s:string" />
    <part name="action" type="s:string" />
    <part name="convId" type="s:string" />
    <part name="fromPartyId" type="s:string" />
    <part name="fromPartyType" type="s:string" />
    <part name="toPartyId" type="s:string" />
    <part name="toPartyType" type="s:string" />
    <part name="refToMessageId" type="s:string" />
  </message>
  <message name="EbmsResponseMsg">
    <part name="message_id" type="s:string" />
  </message>
  <portType name="EbmsSend">
    <operation name="Request">
      <input message="p:EbmsRequestMsg" />
      <output message="p:EbmsResponseMsg" />
    </operation>
  </portType>
  <binding name="EbmsSoapHttpSend" type="p:EbmsSend">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <operation name="Request">
      <soap:operation soapAction="ebmssend" style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <service name="EbmsOutbound">
    <documentation>Documentation not available.</documentation>
    <port name="EbmsSend" binding="p:EbmsSoapHttpSend">
      <soap:address location="http://127.0.0.1:8080/corvus/httpd/ebms/sender" />
    </port>
  </service>
</definitions>

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 22:29
Ok, blijkbaar heeft WSDL.exe in het .Net famework problemen met de manier waarop de messages zijn opgesteld in jouw wsdl document. Ik de WSDL herschreven en er een .cs file van gegenereerd.

Ik ben niet 100% zeker dat dit werkt. Maar als het niet werkt is het denk ik alleen nog een kwestie van namespaces.

bestand = service.wsdl
code:
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
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://service.ebms.edi.cecid.hku.hk/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s2="http://microsoft.com/wsdl/types/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://service.ebms.edi.cecid.hku.hk/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types >
      <s:schema elementFormDefault="qualified" targetNamespace="http://service.ebms.edi.cecid.hku.hk/">
          <s:element name="EbmsRequestMsg">
            <s:complexType>
                <s:sequence>
                  <s:element minOccurs="1" maxOccurs="1" name="cpaId" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="service" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="action" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="convId" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="fromPartyId" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="fromPartyType" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="toPartyId" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="toPartyType" type="s:string" /> 
                  <s:element minOccurs="1" maxOccurs="1" name="refToMessageId" type="s:string" /> 
              </s:sequence>
             </s:complexType>
          </s:element>
          <s:element name="EbmsResponseMsg">
            <s:complexType>
                <s:sequence>
                  <s:element minOccurs="1" maxOccurs="1" name="message_id" type="s:string" /> 
              </s:sequence>
             </s:complexType>
          </s:element>
        </s:schema>
  </wsdl:types>
  <wsdl:message name="EbmsRequestMsgSoapIn">
    <wsdl:part name="EbmsRequestMsg" element="tns:EbmsRequestMsg" />
  </wsdl:message>
  <wsdl:message name="EbmsResponseMsgSoapOut">
    <wsdl:part name="EbmsResponseMsg" element="tns:EbmsResponseMsg" />
  </wsdl:message>
  <wsdl:portType name="EbmsSend">
    <wsdl:operation name="Request">
      <wsdl:input message="tns:EbmsRequestMsgSoapIn" />
      <wsdl:output message="tns:EbmsResponseMsgSoapOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="EbmsSoapHttpSend" type="tns:EbmsSend">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="Request">
      <soap:operation soapAction="http://service.ebms.edi.cecid.hku.hk/ebmssend" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="EbmsOutbound">
    <wsdl:port name="EbmsSend" binding="tns:EbmsSoapHttpSend">
      <soap:address location="http://127.0.0.1:8080/corvus/httpd/ebms/sender" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


in de VS2005 Command Prompt

wsdl.exe service.wsdl

C#:
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.42
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Serialization;

// 
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
// 


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="EbmsSoapHttpSend", Namespace="http://service.ebms.edi.cecid.hku.hk/")]
public partial class EbmsOutbound : System.Web.Services.Protocols.SoapHttpClientProtocol {
    
    private System.Threading.SendOrPostCallback RequestOperationCompleted;
    
    /// <remarks/>
    public EbmsOutbound() {
        this.Url = "http://127.0.0.1:8080/corvus/httpd/ebms/sender";
    }
    
    /// <remarks/>
    public event RequestCompletedEventHandler RequestCompleted;
    
    /// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://service.ebms.edi.cecid.hku.hk/ebmssend", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
    [return: System.Xml.Serialization.XmlElementAttribute("EbmsResponseMsg", Namespace="http://service.ebms.edi.cecid.hku.hk/")]
    public EbmsResponseMsg Request([System.Xml.Serialization.XmlElementAttribute(Namespace="http://service.ebms.edi.cecid.hku.hk/")] EbmsRequestMsg EbmsRequestMsg) {
        object[] results = this.Invoke("Request", new object[] {
                    EbmsRequestMsg});
        return ((EbmsResponseMsg)(results[0]));
    }
    
    /// <remarks/>
    public System.IAsyncResult BeginRequest(EbmsRequestMsg EbmsRequestMsg, System.AsyncCallback callback, object asyncState) {
        return this.BeginInvoke("Request", new object[] {
                    EbmsRequestMsg}, callback, asyncState);
    }
    
    /// <remarks/>
    public EbmsResponseMsg EndRequest(System.IAsyncResult asyncResult) {
        object[] results = this.EndInvoke(asyncResult);
        return ((EbmsResponseMsg)(results[0]));
    }
    
    /// <remarks/>
    public void RequestAsync(EbmsRequestMsg EbmsRequestMsg) {
        this.RequestAsync(EbmsRequestMsg, null);
    }
    
    /// <remarks/>
    public void RequestAsync(EbmsRequestMsg EbmsRequestMsg, object userState) {
        if ((this.RequestOperationCompleted == null)) {
            this.RequestOperationCompleted = new System.Threading.SendOrPostCallback(this.OnRequestOperationCompleted);
        }
        this.InvokeAsync("Request", new object[] {
                    EbmsRequestMsg}, this.RequestOperationCompleted, userState);
    }
    
    private void OnRequestOperationCompleted(object arg) {
        if ((this.RequestCompleted != null)) {
            System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
            this.RequestCompleted(this, new RequestCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
        }
    }
    
    /// <remarks/>
    public new void CancelAsync(object userState) {
        base.CancelAsync(userState);
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class EbmsRequestMsg {
    
    private string cpaIdField;
    
    private string serviceField;
    
    private string actionField;
    
    private string convIdField;
    
    private string fromPartyIdField;
    
    private string fromPartyTypeField;
    
    private string toPartyIdField;
    
    private string toPartyTypeField;
    
    private string refToMessageIdField;
    
    /// <remarks/>
    public string cpaId {
        get {
            return this.cpaIdField;
        }
        set {
            this.cpaIdField = value;
        }
    }
    
    /// <remarks/>
    public string service {
        get {
            return this.serviceField;
        }
        set {
            this.serviceField = value;
        }
    }
    
    /// <remarks/>
    public string action {
        get {
            return this.actionField;
        }
        set {
            this.actionField = value;
        }
    }
    
    /// <remarks/>
    public string convId {
        get {
            return this.convIdField;
        }
        set {
            this.convIdField = value;
        }
    }
    
    /// <remarks/>
    public string fromPartyId {
        get {
            return this.fromPartyIdField;
        }
        set {
            this.fromPartyIdField = value;
        }
    }
    
    /// <remarks/>
    public string fromPartyType {
        get {
            return this.fromPartyTypeField;
        }
        set {
            this.fromPartyTypeField = value;
        }
    }
    
    /// <remarks/>
    public string toPartyId {
        get {
            return this.toPartyIdField;
        }
        set {
            this.toPartyIdField = value;
        }
    }
    
    /// <remarks/>
    public string toPartyType {
        get {
            return this.toPartyTypeField;
        }
        set {
            this.toPartyTypeField = value;
        }
    }
    
    /// <remarks/>
    public string refToMessageId {
        get {
            return this.refToMessageIdField;
        }
        set {
            this.refToMessageIdField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class EbmsResponseMsg {
    
    private string message_idField;
    
    /// <remarks/>
    public string message_id {
        get {
            return this.message_idField;
        }
        set {
            this.message_idField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void RequestCompletedEventHandler(object sender, RequestCompletedEventArgs e);

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class RequestCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
    
    private object[] results;
    
    internal RequestCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
            base(exception, cancelled, userState) {
        this.results = results;
    }
    
    /// <remarks/>
    public EbmsResponseMsg Result {
        get {
            this.RaiseExceptionIfNecessary();
            return ((EbmsResponseMsg)(this.results[0]));
        }
    }
}

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Vedett. schreef op maandag 16 juli 2007 @ 15:40:
Ok, blijkbaar heeft WSDL.exe in het .Net famework problemen met de manier waarop de messages zijn opgesteld in jouw wsdl document. Ik de WSDL herschreven en er een .cs file van gegenereerd.

Ik ben niet 100% zeker dat dit werkt. Maar als het niet werkt is het denk ik alleen nog een kwestie van namespaces.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
EbmsRequestMsg ebmsRequestMsg = new EbmsRequestMsg();
            ebmsRequestMsg.action = this.action;
            ebmsRequestMsg.convId = this.conversationId;
            ebmsRequestMsg.cpaId = this.cpaId;
            ebmsRequestMsg.fromPartyId = this.fromPartyId;
            ebmsRequestMsg.fromPartyType = this.fromPartyType;
            ebmsRequestMsg.refToMessageId = this.refToMessageId;
            ebmsRequestMsg.service = this.service;
            ebmsRequestMsg.toPartyId = this.toPartyId;
            ebmsRequestMsg.toPartyType = this.toPartyType;

            EbmsOutbound ebmsOutbound = new EbmsOutbound();
            ebmsOutbound.Url = this.senderWSURL;
            
            EbmsResponseMsg ebmsResponseMsg = ebmsOutbound.Request(ebmsRequestMsg);


Het e.a. heb ik gewrapped in een EbmsSender class, de constructor ontvangt alle variabelen die in het codeblok gebruikt worden, dit doet niks af aan de werking verder.

Ik krijg met de call een SoapHeaderException, met de tekst "Missing delivery information".

[ Voor 57% gewijzigd door DrDelete op 16-07-2007 16:47 ]


  • Vedett.
  • Registratie: November 2005
  • Laatst online: 22:29
Ik heb nog nooit een java webserivece geconsumed in een productie-omgeving. Al wel eens wat uitgetest, maar niet echt heel grondig. Bij mij heeft dat altijd gewerkt.

Dus ik vermoed dat je extra SOAP-Headers moet meesturen met je bericht. Ik heb ondertussen een vermoeden dat je de webservice niet zelf geschreven hebt? Als dat het geval is zal je toch eens naar de leverancier van die webservice moeten vragen wat voor headers (misschien ook http-headers) hij nog verwacht.

Met de info die ik nu heb kom ik ook niet verder.

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Vedett. schreef op dinsdag 17 juli 2007 @ 23:56:
Ik heb nog nooit een java webserivece geconsumed in een productie-omgeving. Al wel eens wat uitgetest, maar niet echt heel grondig. Bij mij heeft dat altijd gewerkt.

Dus ik vermoed dat je extra SOAP-Headers moet meesturen met je bericht. Ik heb ondertussen een vermoeden dat je de webservice niet zelf geschreven hebt? Als dat het geval is zal je toch eens naar de leverancier van die webservice moeten vragen wat voor headers (misschien ook http-headers) hij nog verwacht.

Met de info die ik nu heb kom ik ook niet verder.
De webservice heb ik inderdaad NIET zelf geschreven... het is een open source produkt (Hermes gateway 2.0, afgekort H20).

Inmiddels ben ik er achter gekomen dat de WSDL niet voldoet aan de WS-I Basic Profile v1.1 regels, de makers moeten dus beter hun huiswerk doen ;(

Dit is de log:

Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.
Warning: This web reference does not conform to WS-I Basic Profile v1.1.
R2204: A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute.
- Part 'cpaId' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'service' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'action' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'convId' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'fromPartyId' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'fromPartyType' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'toPartyId' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'toPartyType' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'refToMessageId' of message 'EbmsRequestMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.
- Part 'message_id' of message 'EbmsResponseMsg' from service description with targetNamespace='http://service.ebms.edi.cecid.hku.hk/'.

R2210: If a document-literal binding in a DESCRIPTION does not specify the parts attribute on a soapbind:body element, the corresponding abstract wsdl:message MUST define zero or one wsdl:parts.
- Operation 'Request' on binding 'EbmsSoapHttpSend' from namespace 'http://service.ebms.edi.cecid.hku.hk/'.

For more details on the WS-I Basic Profile v1.1, see the specification
at http://www.ws-i.org/Profiles/BasicProfile-1.1.html.

Warning: one or more operations were skipped.
Warnings were encountered. Review generated source comments for more details.

Writing file 'C:\temp\EbmsOutbound.cs'.

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Vedett. schreef op donderdag 12 juli 2007 @ 20:53:

Probeer anders zelf de code te typen ahv een voorbeeld van een webserice die je in .Net gemaakt hebt. Haal er ook een HTTP-Debugging Proxy bij zoals fiddler. Hoewel die in sommige gevallen ook niet goed mee werkt. Anders zullen het nog grovere middelen worden met bijv. WireShark
Hoe kan ik luisteren naar localhost op poort 8080 berichten via WireShark of Fiddler2 (beide heb ik nu geinstalleerd staan)...

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Heb het inmiddels voor elkaar, dit is mijn werkwijze geweest:

1) WSDL -> client proxy overgeslagen, vanwege problemen met WSDL inhoud
2) WSE 3.0 gedownload en geinstalleerd
3) Een eigen class gemaakt die afgeleid is van SoapClient met een EndpointReference als constructor parameter. Extra functie "Request" toegevoegd op deze class met een SoapMethodAttribuut.
4) Een SoapEnvelope opgebouwd en meegegeven aan de Request method
5) De Request functie call'en met een SoapEnvelope als return value.

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 22:29
WireShark kijkt simpelweg naar alles. Elk TCP/UDP/... pakket dat je via het netwerk verzend. Dus daar moet je niets instellen. Je kan wel filteren om door de bomen (het zijn er heel wat) het bos nog te zien.

Fiddler moet je zien als een proxy-server. Je moet dus requests naar Fiddler sturen en Fiddler zo instellen dat hij naar het juiste adres stuurt. Standaard luistert hij denk ik op poort 8080 en stuurt hij door naar poort 80. Dat zal je dus moeten aanpassen.

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Het soap bericht wat ik moet versturen moet ook attachements hebben. Nu weet ik even niet hoe ik dat moet doen, ben nu bezig met XopContentsNode maar de info is heel summier die meegeleverd wordt met WSE (alleen de beschrijving van de members, zonder voorbeelden)...


Heeft iemand ervaring met soap attachements in WSE 3.0 ? In Java gebruiken ze AttachmentPart.


Ik ben er achter gekomen dat de webservice soap with attachments(SwA) ondersteunt (en niet DIME of MTOM) maar dat .NET daar geen ondersteuning voor biedt in de WSE toolkit.

Mijn vraag: hoe kan ik een soap envelop in .NET 2.0 naar de webservice sturen met attachments zonder gebruik te maken van DIME/MTOM ?

[ Voor 97% gewijzigd door DrDelete op 27-07-2007 13:18 ]

Pagina: 1