Avatar
Nikola Sterziková (PaNika):

Ahoj,
řeším takový problém, napojuji se na cizí webovou službu (v Javě). Komunikace se službou proběhne, proběhne v pořádku i výměna dat, ale aplikace spande při přijímání odpovědi ze služby s chybou: SOAP header Security was not understood.

Další parametry
Webová služba vyžaduje ověření (wse), které proběhne v pořádku
moje aplikace je konzolová, proxy třídu přidávám standardním způsobem jako Web reference
zkoušela jsem SOAP hlavičku z response odstranit (používám vlastní třídu, která dědí z SoapExtension a zachytí událost SoapMessageSta­ge.BeforeDese­rialize, získá stream, ze kterého si udělám XML, najdu nod, který obsahuje soap hlavičku, odstraním a pošlu dál změněný stream) ale bez hlavičky to spadne na jiné chybě: Odpověď není ve správně formátovaném kódu XML. ---> System.Xml.XmlEx­ception: Kořenový element chybí.
komunikace se službou jinak funguje, v návratovém XML mi služba odpovídá, že požadavek byl přijat.

XML response včetně hlavičky:

<?xml version='1.0' encoding='UTF-8'?>
        <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
                <S:Header>
                        <work:WorkContext xmlns:work="http://oracle.com/weblogic/soap/workarea/">rO0ABXdUABx3ZWJsb2dpYy5hcHAuSVBTLVdlYlNlcnZpY2VzAAAA1gAAACN3ZWJsb2dpYy53b3JrYXJlYS5TdHJpbmdXb3JrQ29udGV4dAAHMTEuMTIuMgAA</work:WorkContext>
                        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" S:mustUnderstand="1">
                                <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                                        <wsu:Created>2014-08-21T07:28:44Z</wsu:Created>
                                        <wsu:Expires>2014-08-21T07:29:44Z</wsu:Expires>
                                </wsu:Timestamp>
                        </wsse:Security>
                </S:Header>
        <S:Body>
                <realUpdateResponseMsg xmlns="http://ips.bbm.cz/if2">

                        <kod>0</kod>

                        <zprava>Požadavek přijat.</zprava>

</realUpdateResponseMsg>
        </S:Body>
</S:Envelope>

Předem díky za pomoc.

Editováno 21.8.2014 10:07
 
Odpovědět 21.8.2014 10:06
Avatar
sadlomaslox25:

Je ta sluba verejne dostupna resp. muzes sem na ni dat odkaz ?

 
Nahoru Odpovědět 21.8.2014 11:45
Avatar
Nikola Sterziková (PaNika):

Tak už jsem na to přišla 8-), pro případné podobně postižené jedince uvádím řešení:

  1. Je třeba do projektu doinstalovat WSE 3 (Manage NuGet Packages -> WSE 3.0)
  2. Do referencí přidat Microsoft.Web­.Services3 (pravděpodobně se přidá s instalací)
  3. Otevřít kód třídy proxy a přidat using Microsoft.Web­.Services3;
  4. Změnit třídu, ze které proxy dědí na třídu WebServicesCli­entProtocol (místo z System.Web.Ser­vices.Protocol­s.SoapHttpCli­entProtocol), takže výsledek vypadá nějak takto:
namespace MujNamespace.MojeProxy {
    using System;
    using System.Web.Services;
    using System.Diagnostics;
    using System.Web.Services.Protocols;
    using System.Xml.Serialization;
    using System.ComponentModel;
    using Microsoft.Web.Services3;

   /// atributy vygenerované třídou - pro zjednodušení vypouštím
    public partial class NazevTridyVygenerovanyZProxy : **WebServicesClientProtocol**
    {
        // tělo proxy třídy
    }

Nevýhoda je v tom, že při update proxy třídy se výše zmíněné úpravy přepíší, takže je třeba provést řádnou dokumentaci...

Editováno 21.8.2014 15:30
 
Nahoru Odpovědět 21.8.2014 15:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.