2010-04-08 45 views
15

我想引用Web服務,並且它需要用戶/通過身份驗證。 在VS 2008中,如果我嘗試「添加引用」或「添加服務引用」,我可以輸入的只是網址,無法輸入我的憑據。顯然,如果我嘗試加載WS,它顯示了我一個很好的消息:如何在Visual Studio 2008中對受密碼保護的Web服務進行身份驗證的服務引用

The request failed with HTTP status 403: Forbidden. Metadata contains a reference that cannot be resolved: The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm="weblogic"'. The remote server returned an error: (401) Unauthorized.

所以我的問題是:是否有可能(使用VS 2008)添加到Web服務的引用,被保護?怎麼樣?

回答

4

根據服務的認證方式,你可能是sol。

如果它使用ASP.Net成員資格,沒有喜悅被發現。如果服務代碼是您的,請暫時禁用身份驗證以生成代理。

否則,請嘗試使用標準機制:

http://username:[email protected]/service 

的最佳選擇:從供應商處獲得的WSDL和使用wsdl.exe生成您的代理。響應

更新評論:

是,爲了生成代理嘲諷的服務是完全合理的計劃,如果該目標服務是ASP.net服務或只接受並返回簡單類型。

Web服務構造函數有一個接受Uri的重載,或者您可以修改生成的源。

如果你選擇修改生成的源代碼,你可能會想只提取代理類和刪除webservice的參考:

後您生成VS代理,如果「顯示所有文件」和鑽下載到WebService Reference中,您將找到一個名爲Reference.cs的文件。這是您需要的唯一文件。將內容複製到另一個文件,然後刪除Web服務引用。

如果您這樣做,您可以在此時將驗證邏輯添加到代理中。

但是,再次,從供應商獲取WSDL是最好的選擇。

祝你好運。

+0

不,我們沒有在服務控制(和他們贏得了」取消認證方案)。使用duo用戶:通過URL也不起作用... 可以添加對另一個服務(不需要身份驗證的服務)的引用,然後修改一些配置文件並更改URL和輸入我的憑據? – ditto1977 2010-04-09 15:27:29

+0

@ user312305 - 當然,這將是一種方式。查看更新的答案。至於實際的認證,這是另一回事。您的問題問如何生成代理,而不是如何以編程方式驗證和調用受保護的服務。問另一個問題,我會回答。一定要包括有關使用什麼平臺和認證方案的詳細信息,例如IIS,Asp.net webservice,FormsAuthentication等。看起來您可能需要添加www-auth頭。 – 2010-04-09 16:10:10

+0

嗯,事情是,我們的提供者使用Vordel,它不公開一個wsdl(它暴露了一個URL,它掩蓋了所有可用的操作),所以我迷失了關​​於如何使用wsdl.exe生成代理(和這是我唯一想要的 - 生成代理)。我知道這個服務可以工作,我可以使用SoapUI進行測試,創建一個新的端點到已經生成的wsdl項目,並填充用戶/密碼屬性。我在VS2008中嘗試生成一個隨機的WS Reference,但由於我不知道「真實」服務暴露了什麼屬性,我認爲我不能修改代碼。 (感謝您的幫助!) – ditto1977 2010-04-09 16:43:46

6

這聽起來像你正在嘗試使用Web引用,而不是服務引用(儘管我相信Web引用是一種服務引用)。在VS08中,啓動「添加服務引用」後,鍵入Web服務的URL,單擊「高級」按鈕,然後單擊「添加Web引用」。再次輸入網址,然後點擊「添加Web引用」。現在,你應該有一個Web引用,而不是,那麼認證類似於如下:

WebService.Service myService = new WebService.Service(); 
myService.Credentials = new System.Net.NetworkCredential("username", "password"); 
WebService.ResultType results = myService.MyMethodReturnsResultType(); 
3

晚回覆,但你也可以得到,如果你在Visual Studio的Web瀏覽器中打開你的網站並登錄它的工作纔有效。如果你的auth模型支持cookies的話。

+1

+1 - 當嘗試更新登錄頁面後面的SaleForce WSDL時,此功能非常適合我。在Visual Studio 2013中,您可以通過單擊頂部菜單「查看」 - >「其他Windows」 - >「Web瀏覽器」來打開Web瀏覽器 – drobison 2014-09-03 18:56:06

0

如果使用WSDL生成代碼,您可以覆蓋GetWebRequest()方法,這將允許您添加授權頭

protected override System.Net.WebRequest GetWebRequest(Uri uri) 
{ 
    var req = base.GetWebRequest(uri); 
    req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("username:password"))); 
    return req; 
} 
相關問題