Вот ситуация.Я разработчик 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");
Спасибо.