Witam,
Mam takie zadanie do wykonania : "Wymagane jest określenie po otrzymaniu odpowiedzi z usługi, której wiadomości dotyczyła dana odpowiedź (odczytanie MessageId z WS-Addressing)"
Mam stworzony serwis(prosty kalkulator) , z którym komunikuję się za pomocą klienta(aplikacja konsolowa).
Za pomocą narzędzia 'wcftestklient' podejrzałem jak wygląda request i response . Spostrzegłem , że messageId jest jedynie wysyłane w request , a w response nie ma już o tym mowy, więc jak mam pobrać w kliencie messageId wiadomości która właśnie dotarła. hm ?
wrzucam SOAP dla request:
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">http://tempuri.org/IMathService/Calculate</a:Action>
<a:MessageID>urn:uuid:1a63fcea-b0a4-436c-b8b2-4f010a9ee7ba</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
</s:Header>
<s:Body>
<Calculate xmlns="http://tempuri.org/">
<a>2</a>
<b>3</b>
<typDzialania>43</typDzialania>
</Calculate>
</s:Body>
</s:Envelope>
oraz response:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1" u:Id="_2">http://tempuri.org/IMathService/CalculateResponse</a:Action>
<a:RelatesTo u:Id="_3">urn:uuid:945f51ed-bff8-45cd-a86e-dc5c83f016fc</a:RelatesTo>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="uuid-4af22a12-abf8-4222-89a7-c563be3c8bdd-11">
<u:Created>2012-10-21T20:31:11.231Z</u:Created>
<u:Expires>2012-10-21T20:36:11.231Z</u:Expires>
</u:Timestamp>
<c:DerivedKeyToken u:Id="uuid-4af22a12-abf8-4222-89a7-c563be3c8bdd-7" xmlns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
<o:SecurityTokenReference>
<o:Reference URI="urn:uuid:1f9474ab-2b57-4eb4-8000-d2fbe2cbe80c" ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct" />
</o:SecurityTokenReference>
<c:Offset>0</c:Offset>
<c:Length>24</c:Length>
<c:Nonce>5IXVXAQakyw7rxMhjGfoyQ==</c:Nonce>
</c:DerivedKeyToken>
<c:DerivedKeyToken u:Id="uuid-4af22a12-abf8-4222-89a7-c563be3c8bdd-8" xmlns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
<o:SecurityTokenReference>
<o:Reference URI="urn:uuid:1f9474ab-2b57-4eb4-8000-d2fbe2cbe80c" ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct" />
</o:SecurityTokenReference>
<c:Nonce>pYXsbaCzkYyB12VA22okuA==</c:Nonce>
</c:DerivedKeyToken>
<e:ReferenceList xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:DataReference URI="#_1" />
<e:DataReference URI="#_4" />
</e:ReferenceList>
<e:EncryptedData Id="_4" Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<o:SecurityTokenReference>
<o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/dk" URI="#uuid-4af22a12-abf8-4222-89a7-c563be3c8bdd-8" />
</o:SecurityTokenReference>
</KeyInfo>
<e:CipherData>
<e:CipherValue>tu był jakis dlugi ciag znakow -ktory usunalem - pewnie nie jest istotny, a zajmowal duzo miejsca</e:CipherValue>
</e:CipherData>
</e:EncryptedData>
</o:Security>
</s:Header>
<s:Body u:Id="_0">
<CalculateResponse xmlns="http://tempuri.org/">
<CalculateResult xmlns:a="http://schemas.datacontract.org/2004/07/MathServiceProject.Messages" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:DataRozpoczecia>2012-10-21T22:31:11.2319433+02:00</a:DataRozpoczecia>
<a:DataZakonczenia>2012-10-21T22:31:11.2319433+02:00</a:DataZakonczenia>
<a:Liczba1>2</a:Liczba1>
<a:Liczba2>3</a:Liczba2>
<a:Typ>43</a:Typ>
<a:Wynik>5</a:Wynik>
<a:idIncoming xmlns:b="http://schemas.datacontract.org/2004/07/System.Xml" />
<a:idOutgoing i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/System.Xml" />
</CalculateResult>
</CalculateResponse>
</s:Body>
</s:Envelope>
W skrócie chodzi oto, że klient wysyła do usługi wiadomości , ale z usługi do klienta wracają w różnych odległościach czasowych no i właśnie po to jest te odczytywanie messageId , żeby wiedzieć do którego request-a jest dany response.
Wiecie jak rozwiązać ten problem?