WSDL без информации о сериализации - PullRequest
1 голос
/ 27 августа 2011

Я пытаюсь отправить запрос в веб-сервис. Wsdl можно увидеть здесь

https://amsel.dpwn.net/abholportal/gw/lp/schema/1.0/var3ws.wsdl

Создать запрос просто

            BookLabelRequest request = new BookLabelRequest();

        RpPartnerType rpt = new RpPartnerTypeClient();
        dhlService.BookLabelResponse response = rpt.BookLabel(new dhlService.BookLabelRequest());

но как передать ему необходимые параметры, если не выставлен сериализуемый BookLabelRequest? и как мне передать имя пользователя / пароль в шапке?

Пример запроса SOAP:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:var="https://amsel.dpwn.net/abholportal/gw/lp/schema/1.0/var3bl">
<soapenv:Header>
    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <wsse:UsernameToken>
            <wsse:Username>username</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>
</soapenv:Header>
<soapenv:Body>
    <var:BookLabelRequest portalId ="OnlineRetoure" deliveryName="Deutschland_Var3" 
                            shipmentReference="notreturnedonlabel" customerReference="CustomerRef1234567890" 
                            labelFormat="PDF" senderName1="Markus" senderName2="Beck" 
                            senderCareOfName="actualnotinuse" senderContactPhone="" 
                            senderStreet="Buschmühlenstraße" senderStreetNumber="40" 
                            senderBoxNumber="" senderPostalCode="58093" senderCity="Hagen"/>
</soapenv:Body>


Файл wsdl не мой, поэтому я не могу его редактировать. Есть ли другой способ импортировать это. Я пытался создать контракт данных из xsd с помощью svcutil, но я получил сообщение об ошибке:

Ввод читать из "https://amsel.dpwn.net/abholportal/gw/lp/schema/1.0/ var3bl.xsd "не согласуется с другими параметрами

Я также пытался передать имя пользователя и пароль на прокси

            RpPartnerType test = new RpPartnerTypeClient();
        ((RpPartnerTypeClient)test).ClientCredentials.UserName.UserName = "username";
        ((RpPartnerTypeClient)test).ClientCredentials.UserName.Password = "password";

        dhlService.BookLabelResponse response = test.BookLabel(new dhlService.BookLabelRequest());

но получил ошибку: аутентификация не удалась: имя пользователя не указано

Обязательная защита:

                <security mode="Transport">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Создайте запрос HttpWebRequest в соответствии с блогом Майка Хэдлоу и отправьте его.

http://mikehadlow.blogspot.com/2006/05/making-raw-web-service-calls-with.html

Возможно, есть лучшие способы добиться этого, но это сработало.

1 голос
/ 27 августа 2011

Ваш WSDL импортирует XSD с информацией сериализации из другого пути:

https://amsel.dpwn.net/abholportal/gw/lp/schema/1.0/var3bl.xsd

, но местоположение в WSDL должно указывать полный этот путь.

Если вам нужно использовать профиль UserNameToken, вы должны сначала указать привязку для вашего клиента:

<bindings>
  <basicHttpBinding>
    <binding name="secured">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="UserName" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

И использовать эту привязку в конечной точке клиента:

<client>
  <endpoint address="..." name="..." contract="..." binding="basicHttpBining" 
            bindingConfiguration="secured" />
</client>

После того, как ваш клиент настроен, вам нужно создать прокси службы и установить учетные данные "

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