C# volání WS přes SAP SOAP 1.1 rubrika: Programování: .Net
Ahoj
Potřeboval bych postrčit s WS SOAP dotazem. Mám program v C#, který volá WS. Základní dotaz, který funguje bez SAP obálky dobře, ale s ní ne. Základem je třída BasicHttpBinding:
BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress epAddr = new EndpointAddress(endpointAddress); DataClient proxy = new DataClient(binding, epAddr); ...
Volání služby končí chybou:
There was a communication problem. Záhlaví ReliableMessaging z oboru názvů <a href="http://sap.com/xi/XI/Message/30" title="http://sap.com/xi/XI/Message/30">http://sap.com/xi/XI/Message/30</a> příjemce této zprávy neporozuměl a zpráva proto nebyla zpracována. Tato chyba obvykle udává, že odesílatel zprávy povolil komunikační protokol, který příjemce nemůže zpracovat. Zkontrolujte, zda je konfigurace klientovy vazby konzistentní s vazbou služby.
Dočetl jsem se, že ReliableMessaging je podporován třídou WSHttpBinding, proto jsem ji použil jaki druhý pokus:
WSHttpBinding binding = new WSHttpBinding(); EndpointAddress epAddr = new EndpointAddress(endpointAddress); DataClient proxy = new DataClient(binding, epAddr); ...
Volání služby opět končí chybou, ale jinou:
There was a communication problem. Typ obsahu text/html; charset=iso-8859-1 zprávy odpovědi neodpovídá typu obsahu vazby (application/soap+xml; charset=utf-8). Používáte-li vlastní kodér, ujistěte se, že je metoda IsContentTypeSupported správně implementována. První 516 bajty odpovědi byly: <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Body> <soap:Fault> <soap:Code> <soap:Value>Server</soap:Value> </soap:Code> <soap:Reason> <!--1 or more repetitions:--> <soap:Text xml:lang="en">Missing operation for soapAction [null] and body element [{http://schemas.xmlsoap.org/ws/2005/02/trust}RequestSecurityToken] with SOAP Version [SOAP 1.2]</soap:Text> </soap:Reason> </soap:Fault> </soap:Body> </soap:Envelope>.
V tomto případě je problém, že se volání provádí pomocí SOAP 1.2 a ne dle očekávaného volání SOAP 1.1.
Nevíte prosím vás někdo, jak správně zavolat webovou službu tak, aby podporovala ReliableMessaging a současně byla verze SOAP 1.1?
Děkuji
Petr
Zaměřil bych se na importované proxy třídy. Za prvé je dobré nepoužívat na to Visual Studio (Add Service Reference), protože to vygeneruje spoustu zbytečného balastu. Přitom stačí jen ten jeden .cs soubor. Použij svcutil z Visual Studio Command Prompt a parametr: /serializer:XmlSerializer
Pokud jde o nějakou nestandardní kombinaci jako je použítí WS-* služeb a SOAP 1.1, pak je třeba WCF Custom Binding https://stackoverflow.com/a/5418950
Pro plný přístup na Devel.cz se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře