Получение ответа с помощью клиента VB.NET из веб-службы Java - PullRequest
3 голосов
/ 26 мая 2011

Вот ситуация.Я разработчик Java.Другой разработчик в нашей компании написал веб-сервис для наших клиентов.Они написали сервис на Java.Они также написали демо-версию для создания клиента для использования веб-сервиса на Java, и он прекрасно работает.Мне было поручено создать клиент веб-служб в VB.NET, чтобы сделать то же самое.Это не шло гладко.Проблема в том, что веб-сервис требует, чтобы вы отправили имя пользователя и пароль в заголовке SOAP, и я не могу понять, как это сделать в Vb.NET.Я просмотрел следующие страницы:

Я не могузаставить любого из них работать.Я постоянно получаю «Soap Header с UserName и зашифрованный пароль отсутствует» из веб-службы.Я испробовал все советы, данные в предыдущем вопросе:

Необходимо добавить имя пользователя и пароль в заголовок SOAP в клиенте веб-службы VB.NET

Явсе еще получаю ту же ошибку.

Вот код, который я написал.

Imports System.Net
Imports System.ServiceModel

Public Class RandomQuoteForm

    Private Sub GetQuoteButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetQuoteButton.Click
        Dim imageService As AverittWebServices.SendWebImageClient = New AverittWebServices.SendWebImageClient("SendWebImagePort")
        imageService.ClientCredentials.UserName.UserName = "apriltest11"
        imageService.ClientCredentials.UserName.Password = "ew6ttRob1LY+Ik9E5oKlbA=="
        Dim imageResult As String

        imageResult = imageService.getAvailableImages("")
        DisplayLabel.Text = imageResult
    End Sub
End Class

Вот WSDL:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->
<definitions targetNamespace="https://webservices.averittexpress.com/SendWebImageService" name="SendWebImageService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="https://webservices.averittexpress.com/SendWebImageService" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <types>
    <xsd:schema>
      <xsd:import namespace="https://webservices.averittexpress.com/SendWebImageService" schemaLocation="SendWebImageService_schema1.xsd"/>
    </xsd:schema>
  </types>
  <message name="getDocument">
    <part name="parameters" element="tns:getDocument"/>
  </message>
  <message name="getDocumentResponse">
    <part name="parameters" element="tns:getDocumentResponse"/>
  </message>
  <message name="getAvailableImages">
    <part name="parameters" element="tns:getAvailableImages"/>
  </message>
  <message name="getAvailableImagesResponse">
    <part name="parameters" element="tns:getAvailableImagesResponse"/>
  </message>
  <portType name="SendWebImage">
    <operation name="getDocument">
      <input message="tns:getDocument"/>
      <output message="tns:getDocumentResponse"/>
    </operation>
    <operation name="getAvailableImages">
      <input message="tns:getAvailableImages"/>
      <output message="tns:getAvailableImagesResponse"/>
    </operation>
  </portType>
  <binding name="SendWebImagePortBinding" type="tns:SendWebImage">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="getDocument">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
    <operation name="getAvailableImages">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="SendWebImageService">
    <port name="SendWebImagePort" binding="tns:SendWebImagePortBinding">
      <soap:address location="https://webservices.averittexpress.com/SendWebImageService"/>
    </port>
  </service>
</definitions>

Вот схема:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="https://webservices.averittexpress.com/SendWebImageService" xmlns:tns="https://webservices.averittexpress.com/SendWebImageService" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="getAvailableImages" type="tns:getAvailableImages"/>

  <xs:element name="getAvailableImagesResponse" type="tns:getAvailableImagesResponse"/>

  <xs:element name="getDocument" type="tns:getDocument"/>

  <xs:element name="getDocumentResponse" type="tns:getDocumentResponse"/>

  <xs:complexType name="getDocument">
    <xs:sequence>
      <xs:element name="arg0" type="xs:string" minOccurs="0"/>
      <xs:element name="arg1" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getDocumentResponse">
    <xs:sequence>
      <xs:element name="return" type="xs:base64Binary" nillable="true" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getAvailableImages">
    <xs:sequence>
      <xs:element name="arg0" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getAvailableImagesResponse">
    <xs:sequence>
      <xs:element name="return" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Я потратил целых 3 дня, пытаясь заставить это работать.Я не сомневаюсь, что разработчик VB.NET может выкинуть эту вещь из спешки.Я просто не такой разработчик и, честно говоря, у меня есть другие вещи, над которыми я бы хотел поработать.Я пришел к тому, что готов попробовать что-то немного другое.Итак, вот сделка.Первому разработчику, который отправит ответ на этот вопрос с помощью кода, который я смог получить на своем ноутбуке (Visual Basic Express Edition 2010), и с любыми объяснениями, необходимыми для его работы, я пожертвую 100 долларов на благотворительность по их выбору.Это не количество, меняющее мир, но большинство благотворительных организаций, которые я знаю, будут благодарны за эту мысль.

Имя пользователя должно быть "apriltest11".Зашифрованный пароль должен быть «ew6ttRob1LY + Ik9E5oKlbA ​​==».Допустимые аргументы, которые вы можете передать методу getAvailableImages: 0419151598 и 1022600388

WSDL общедоступен, а комбинация имени пользователя и пароля предназначена только для тестирования, поэтому не думайте, что я выдаю ключикоролевство здесь.Я хотел бы получить ответ на это.Я не только смогу вернуться к своему обычному Java-проекту, но сейчас мне бы хотелось увидеть, как это делается.

Java-код для установки имени пользователя и пароля:

URL wsdlLocation = new URL("C:/ .../WEB-INF/wsdl/EncryptedPasswordService.wsdl");
QName qName =new QName("https://webservices.averittexpress.com/EncryptedPasswordService");

EncryptedPasswordService service = new EncryptedPasswordService(wsdlLocation,qName);
EncryptedPassword port = service.getEncryptedPasswordPort();
String encryptedPwd = port.getEncryptedPwd("username", "password");

Спасибо.

1 Ответ

0 голосов
/ 08 декабря 2011

Правильно ли ваши веб-службы публикуют метаданные?Если это так, я считаю, что вы можете щелкнуть правой кнопкой мыши в обозревателе решений Visual Studio и добавить веб-ссылку, которая создаст прокси для вас.

Это сработает, только если вы используете Visual Studio.Я не знаю, нравится ли разработчикам Java ot или нет.

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