从Java Web Service获取VB.NET客户端的响应

时间:2011-05-26 19:41:42

标签: vb.net web-services soap client

这是情况。我是一名Java开发人员。我们公司的另一位开发人员为我们的客户写了一个Web服务。他们用Java编写了这个服务。他们还编写了一个演示用于创建客户端以使用Java中的Web服务,它运行得很好。我的任务是在VB.NET中创建一个Web服务客户端来做同样的事情。它并不顺利。问题是Web服务要求您在SOAP标头中发送用户名和密码,我无法弄清楚如何在Vb.NET中执行此操作。我查看了以下几页:

我无法让他们中的任何一个工作。我一直从Web服务获得“UserName和加密密码丢失”的“Soap Header”。我已经尝试了上一个问题中给出的所有建议:

Need to add username and password to SOAP header in VB.NET Web Service Client

我仍然遇到同样的错误。

这是我写的代码。

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 :(得分:0)

您的Java Web服务是否正确发布元数据。如果是这样,我相信您可以右键单击visual studio解决方案资源管理器并添加将为您创建代理的Web引用。

只有在使用Visual Studio时才会有效。我不知道Java开发人员是否喜欢。