2011-09-12 82 views
9

我正在使用vs2010。在一個簡單的控制檯應用程序中,我嘗試添加一個服務參考http://***/service1.asmx,舊的asmx服務。 我的電腦是代理服務器的後面,所以我得到一個錯誤:從代理服務器後面添加Web服務參考

「遠程服務器返回了意外的響應:(407)代理 需要身份驗證」。

當使用WSDL工具,我無法定義代理服務器端口號和我得到的消息是服務器,用於examle 10.0.0.3:80,沒有迴應,但我需要指定端口8080,不知道IM怎麼樣。我怎樣才能創建一個參考?

回答

7

看看下面添加web引用時指定的代理服務器地址和服務器端口的鏈接。

http://msdn.microsoft.com/en-us/library/bb628649.aspx

http://msdn.microsoft.com/en-us/library/03seed2h.aspx

添加一個引用到ASMX

  1. 右鍵單擊控制檯應用程序,然後選擇添加服務引用。

  2. 點擊高級按鈕並在地址欄中輸入asmx地址。點擊旁邊的綠色按鈕來發現asmx。

  3. 給它一個名字,然後單擊add ref。

更新:嘗試更新網絡配置/應用程序配置和添加;

<system.net> 

<defaultProxy> 
<proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]" bypassonlocal="True"/> 

</defaultProxy> 

</system.net> 
+0

當我做所以我得到一個錯誤操作是無效的,由於對象的當前狀態。 – Nikita

+0

我已經更新了我的答案,讓我知道如果有幫助。 – WooHoo

+0

我已經嘗試將此設置添加到app.config並且錯誤仍然發生。當我添加Web引用時,我可以看到服務描述。我必須鏈接到2種服務方法。另外我爲代理配置IE選項。 – Nikita

3

將基準:

確保您添加這樣的參考。您需要點擊「Add Service Reference」,轉到「Advanced」,最後點擊「Add Web Reference」。

然後添加以下內容:

http://***/service1.asmx 

對於port 8080你使用:

http://***:8080/service1.asmx 

設置代理服務器爲您的Web服務:

爲了確保Web服務是使用您的Internet Explorer proxy,您可以將以下內容添加到您的客戶端上的Web Service對象上摺疊。

webService1.Proxy = WebRequest.GetSystemWebProxy(); 

您也可以手動設置代理服務器:

webService1.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/"); 

NTLM

如果使用NTLM你可能需要確保您使用默認憑據您的客戶端上項目也是如此。使用設置爲trueUseDefaultCredentials創建Web服務時,您可以輕鬆地將其傳入。

public webService _webService = new webService() { UseDefaultCredentials = true }; 

您還可以爲您的Web服務項目禁用NTLM身份驗證。您可以在Project Properties -> Web下執行此操作。如果取消選中此選項,則應該能夠添加Web服務而無需進行身份驗證。

http://msdn.microsoft.com/en-us/library/aa378749.aspx

+0

UPD: Web服務,這是我想在我的控制檯應用程序使用已經得到了匿名身份驗證。 在我的控制檯應用程序中我找不到項目屬性 - > Web。 – Nikita

+0

這將在您的Web服務下,而不是在客戶端下。 – eandersson

+0

「您也可以爲您的Web服務項目禁用NTLM身份驗證,您可以在Project Properties - > Web下執行此操作。如果取消選中此選項,則應該能夠添加Web Service而無需進行身份驗證。 - 就像我之前提到的那樣,Web服務具有匿名身份驗證。所以我可以通過瀏覽器打開網頁服務頁面。當我使用瀏覽器打開服務uri時,它(瀏覽器)向我顯示一個輸入用戶名和密碼的窗口。我只提供代理服務器憑據。 – Nikita

2

我無法使用vs2010自動創建Web服務引用。 我決定使用Wsdl.exe用的工具,並在參數中指定/參數傳遞XML文件與代理服務器憑據

Wsdl.exe用http://service URI/Service1.asmx的 /parameters:c:\temp\wsdlparameters.xml

WSDL.exe生成一個文件Service1.cs(默認)。我將此文件添加到我的項目,這樣使用它:

WebProxy wp = new WebProxy(@"YourProxyServer",ProxyPort); 
wp.Credentials = new NetworkCredential("USERNAME", "PASSWORD"); 
Service1 service1 = new Service1(); 
service1.Proxy = wp; 
service1."YourServiceMethod"(); 
+0

很高興你到達那裏了 – WooHoo

+0

你看了我的最後一條評論嗎?它*應該*自動爲你做這個,基於你的IE設置 – eandersson

+0

我不知道還有什麼配置來使它自動工作,也許我們的代理阻止某種流量,但我認爲http足以添加引用。 – Nikita

26

我花了近50小時發現問題,無法在網絡上的任何地方找到這個簡單的解決方案。

下web.config 「配置」 部分補充一點:

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy> 
</system.net> 

然後就像一個魅力!

您也可以從後面的代碼做到這一點:

serviceConnection = new WebService1(); 
serviceConnection.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy(); 
serviceConnection.Proxy.Credentials = CredentialCache.DefaultCredentials; 

作品美麗!!

如果需要從HTTPS位置消耗增加這個配置:

<message clientCredentialType="Certificate" algorithmSuite="Default" /> 
+2

+1 Gem!Simple and worked。 – HockeyJ

+0

成員'serviceConnection.Proxy'屬於哪個類? –

+0

完美解決方案,實際上我想避免默認代理設置,我複製你的想法和殘疾人代理在配置