2012-09-14 31 views
0

我幫助別人使用Visual Studio工具應用到InfoPath應用程序連接到使用WCF,需要一個用戶名和密碼寫服務的SOAP發送標題(clientCredentialType =「UserName」)。該服務使用basicHttpBinding。消費WCF服務隨着ClientCredentialType =「用戶名」從.net 2.0

InfoPath中2010依賴於Visual Studio工具2005應用程序,因此我堅持必須添加一個「Web引用」而非「服務引用」。我以前從來沒有這樣做過,試圖弄清楚如何做到這一點變得非常困難。

在服務引用我只是說:

service.Credentials.UserName.UserName = "username"; 
service.Credentials.UserName.Password = "password"; 

但是,當使用Web引用憑據屬性,行爲不同費時,我不能讓它自動傳遞的SOAP頭中的用戶名和密碼。

我已經嘗試了一些事情,包括這些沒有運氣:

MyService service = new MyService(); 
CredentialCache cache = new CredentialCache(); 
// I've tried "Basic" and string.Empty as well in the place of "UserName" 
cache.Add(new Uri(service.Url), "UserName", new NetworkCredential("username", "password")); 
service.Credentials = cache; 
service.PreAuthenticate = true; 

service.MyMethod(); 

MyService service = new MyService(); 

service.Credentials = new NetworkCredential("username", "password"); 

service.MyMethod(); 

,但沒有運氣可言。在服務上記錄整個消息,用戶名和密碼根本不包含在SOAP頭中,我收到以下錯誤:「驗證消息的安全性時發生錯誤。」

+0

嗨,這有什麼好運?我需要類似的東西。在我的情況下,我正在尋找一種方法來在SOAP頭中的java應用程序傳遞用戶/密碼,以便通過wcf服務進行驗證。謝謝! – Roberto

+0

答案真的只是你無法從.Net 2.0自動完成。然而,在Java的情況下,答案可能完全不同。我已經通過手動構建SOAP併發布到服務器中去了Android應用程序中的懶惰路線(當然是Java)。 – omatase

回答

1

答案真的只是,你不能從.net 2.0自動做到這一點。

0

爲什麼有WCF已經取代ASMX原因。支持安全標準就是其中之一。

如果您使用VSTA,那麼我相信你可以使用COM對象。你可以使用.NET 3.5創建一個COM對象(這只是.NET 2.0 SP2加上一些額外的庫)。此COM對象可以使用WCF服務引用來使用該服務,但只會公開COM。任何可以使用COM對象的代碼都可以使用你的「代理對象」。