2015-09-11 57 views
0

我們有一個在SAP中創建的Web服務消耗。我們能夠連接到服務成功地像使用使用C#的SOAP基本授權

var rowss = new EpiCompaniesImplServiceService(); //Service object creation 
rowss.Credentials = new NetworkCredential("username", "password"); 

客戶建議我們不要在純文本,但在使用的用戶名密碼&編碼字符串的base64發送憑據。爲此,我們試圖通過轉換credentails添加授權頭base64編碼方式如下圖所示,

WebRequest myReq = WebRequest.Create(rowss.Url); 
string usernamePassword = "username" + ":" + "password"; 
CredentialCache mycache = new CredentialCache(); 
myReq.Credentials = mycache; 
myReq.Headers.Add("Authorization", "Basic " + usernamePassword); 

但它拋出401未經授權錯誤。 現在客戶端要求我們嘗試傳遞SOAP標頭。請建議我通過將編碼憑據通過N/W憑證或通過SOAP頭傳遞來實現它。

+0

我想你需要加入這一行'mycache.Add(新的URI(rowss.Url), 「基本」,基本);' – Jaco

+0

它不是那樣工作的。嘗試過之前,它自己 –

+0

你是否嘗試設置預認證爲true:'rowss.PreAuthenticate = true;' – Jaco

回答

1

好像你只是缺少base64編碼:

WebRequest myReq = WebRequest.Create(rowss.Url); 
string usernamePassword = "username" + ":" + "password"; 
usernamePassword = Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)); // <--- here. 
CredentialCache mycache = new CredentialCache(); 
myReq.Credentials = mycache; 
myReq.Headers.Add("Authorization", "Basic " + usernamePassword); 
+0

帖木兒,謝謝你的迴應,但我們已經嘗試了上面的代碼,我已經提到了我的問題與基地64編碼如你所說,並以正常的方式,但是,都沒有工作。我想有必要傳遞給SOAP Header或通過網絡憑證。任何猜測如何做到這一點? –

+0

我是對的,它沒有base64的工作,然後當你在base64編碼它停止wotking? –