SOAP Запрос клиента с WS-Security и UserNameToken через HTTP - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в WCF, я должен использовать пару методов службы WCF, сообщение с запросом ниже:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://xx.xxxx.xxxx.xxxxxxxxxx.xxx">
    <soapenv:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:UsernameToken wsu:Id="UsernameToken-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
                <wsse:Username>myUserName</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password>
                <wsu:Created>2020-04-22T12:24:08.639Z</wsu:Created>
            </wsse:UsernameToken>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <ws:myMethod>
            <ws:arg0>
                <ws:user>myUserName</ws:user>
                <ws:appId>myAppId</ws:appId>
                <ws:iddoc>myIdDoc</ws:iddoc>
            </ws:arg0>
        </ws:myMethod>
    </soapenv:Body>
</soapenv:Envelope>

Я не знаю, как получить такое сообщение программно, в настоящее время Я добавил сервисную ссылку в проект и добавил несколько строк:

var remoteAddress = new System.ServiceModel.EndpointAddress("myEndpoint");
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
client = new Service.myClient(binding, remoteAddress);
client.ClientCredentials.UserName.UserName = "myUsernName";
client.ClientCredentials.UserName.Password = "myPassword";
Service.MyMethodRequest r = new Service.MyMethodRequest() { u = "myUsername", Id = "myAppId", idd = "myIdDoc" };
var tmp = client.MyMethod(r);

Это сообщение вывода запроса, которое я могу получить с помощью Wireshark:

<s:Envelope
        xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <myMethod
                xmlns="http://xx.xxxx.xxxx.xxxxxxxxxx.xxx">
            <arg0>
                <u>myUsername</u>
                <aId>myAppId</Id>
                <idd>myidDoc</idd>
            </arg0>
        </myMethod>
    </s:Body>
</s:Envelope>

, конечно, я получить эту ошибку обратно с сервера:

<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode
                xmlns:ns1="http://ws.apache.org/wss4j">
                ns1:SecurityError
            </faultcode>
            <faultstring>
                A security error was encountered when verifying the message
            </faultstring>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

Большое спасибо! Хорошего дня!

...