Java WebService с проблемой .NET. Результаты разные со scvutil / wrapped и не - PullRequest
1 голос
/ 28 июля 2011

Я использую API известного поставщика с WSDL link1 , link2 (нажмите wait to download):

Вышеупомянутая документация требует, чтобы я создал пакет запроса аутентификации, подобный этому:

 <soapenv:Envelope xmlns:soapenv=‖http://schemas.xmlsoap.org/soap/envelope/‖
xmlns:web=‖http://UltraWebServiceLocation/‖>
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand=‖1‖ xmlns:wsse=‖http://docs.oasisopen.
org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd‖>
<wsse:UsernameToken wsu:Id=‖UsernameToken-16318950‖ xmlns:wsu=‖http://docs.oasisopen.
org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd‖>
<wsse:Username>bwooster</wsse:Username>
<wsse:Password Type=‖http://docs.oasis-open.org/wss/2004/01/oasis-200401-wssusername-
token-profile-1.0#PasswordText‖>**********</wsse:Password>
<wsse:Nonce>QTvkiqEFK7uJuOssMndagA==</wsse:Nonce>
<wsu:Created>2009-04-14T21:20:57.108Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>

Моя клиентская привязка выглядит так; и я использую сервисную ссылку вместо веб-ссылки.

        UltraDNS.UltraDNS1Client client = new UltraDNS.UltraDNS1Client();
        client.ClientCredentials.UserName.UserName = "user";
        client.ClientCredentials.UserName.Password = "pass";

        var results = client.getResourceRecordsOfZone("domain.com",1);
        // Throws InvalidOperationException: There was an error reflecting 'UltraWSException'.
        // Detail:
        //{"Namespace='http://webservice.api.ultra.neustar.com/v01/' is not supported with rpc\\literal SOAP. The wrapper element has to be unqualified."}

Веб-конфигурация выглядит следующим образом

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="UltraDNS1Binding" closeTimeout="00:01:00" openTimeout="00:01:00"
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                    bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://ultra-api.ultradns.com:80/UltraDNS_WS/v01"
                binding="basicHttpBinding" bindingConfiguration="UltraDNS1Binding"
                contract="UltraDNSService.UltraDNS1" name="UltraWebServiceV01Port" />
        </client>
    </system.serviceModel>

Когда я использую SVCUtil для генерации прокси-класса с параметром /wrap, я получаю следующую ошибку:

{"The top XML element 'result' from namespace '' references distinct types System.String and ZoneInfoData[]. Use XML attributes to specify another XML name or namespace for the element or types."}

1 Ответ

0 голосов
/ 28 июля 2011

Похоже, вы использовали «Добавить веб-ссылку». Пожалуйста, используйте "Добавить сервисную ссылку".

Тогда см. Программирование WCF Security .


Сервис отправляет вам какую-то ошибку (UltraWSException). У WCF возникают проблемы с десериализацией, но если вы включите трассировку сообщений, вы сможете увидеть, что это за ошибка, и исправить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...