2011-05-26 105 views
3

這是情況。我是一名Java開發人員。我們公司的另一位開發人員爲我們的客戶寫了一個Web服務。他們用Java編寫了這個服務。他們還編寫了一個演示,用於創建一個客戶端以使用Java中的Web服務,並且它工作得很好。我一直負責在VB.NET中創建一個Web服務客戶端來完成同樣的任務。它一直不順利。問題在於Web服務要求您在SOAP頭中發送用戶名和密碼,並且我無法弄清楚在Vb.NET中如何做到這一點。我看了看以下頁面:從Java Web服務獲取對VB.NET客戶端的響應

我不能讓任何人的工作。我始終從Web服務中獲得「用戶名和加密密碼丟失的肥皂標題」。我已經試過前一個問題給出的所有建議:

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 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"); 

感謝。

+0

我不明白Java版本是如何實際填充SOAP標頭的。您網站上的文檔顯示標題應該是什麼樣子,但我不明白它是如何設置的。一旦我看到我可以幫助你。我參考的文檔是這裏的http://www.averittexpress.com/services/technology/webservices.html – 2011-05-26 21:26:54

+0

我在頁面上發現了這個。這是你在找什麼?我無法讓他的代碼格式正確。我要編輯原始帖子。 – 2011-05-27 13:14:51

+0

我在VB中試過,如果你通過你提供的用戶名和加密密碼,它會返回相同的密碼。但是,我找不到任何說明如何處理它的Java代碼。你有沒有使用加密的用戶名/密碼的工作Java代碼(比你的公共網站上的更多)?我有一個漫長的三天週末,可以使用一些代碼來玩。 – 2011-05-27 13:34:31

回答

0

您的Java Web服務是否正確發佈元數據。如果是這樣,我相信你可以在Visual Studio解決方案資源管理器中右鍵單擊並添加Web引用,它將爲您創建代理。

只有在使用Visual Studio的情況下,這纔會生效。我不知道Java開發人員是否喜歡ot。