我正在使用vs2010。在一個簡單的控制檯應用程序中,我嘗試添加一個服務參考http://***/service1.asmx
,舊的asmx服務。 我的電腦是代理服務器的後面,所以我得到一個錯誤:從代理服務器後面添加Web服務參考
「遠程服務器返回了意外的響應:(407)代理 需要身份驗證」。
當使用WSDL工具,我無法定義代理服務器端口號和我得到的消息是服務器,用於examle 10.0.0.3:80,沒有迴應,但我需要指定端口8080,不知道IM怎麼樣。我怎樣才能創建一個參考?
我正在使用vs2010。在一個簡單的控制檯應用程序中,我嘗試添加一個服務參考http://***/service1.asmx
,舊的asmx服務。 我的電腦是代理服務器的後面,所以我得到一個錯誤:從代理服務器後面添加Web服務參考
「遠程服務器返回了意外的響應:(407)代理 需要身份驗證」。
當使用WSDL工具,我無法定義代理服務器端口號和我得到的消息是服務器,用於examle 10.0.0.3:80,沒有迴應,但我需要指定端口8080,不知道IM怎麼樣。我怎樣才能創建一個參考?
看看下面添加web引用時指定的代理服務器地址和服務器端口的鏈接。
http://msdn.microsoft.com/en-us/library/bb628649.aspx
http://msdn.microsoft.com/en-us/library/03seed2h.aspx
添加一個引用到ASMX
右鍵單擊控制檯應用程序,然後選擇添加服務引用。
點擊高級按鈕並在地址欄中輸入asmx地址。點擊旁邊的綠色按鈕來發現asmx。
給它一個名字,然後單擊add ref。
更新:嘗試更新網絡配置/應用程序配置和添加;
<system.net>
<defaultProxy>
<proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]" bypassonlocal="True"/>
</defaultProxy>
</system.net>
將基準:
確保您添加這樣的參考。您需要點擊「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你可能需要確保您使用默認憑據您的客戶端上項目也是如此。使用設置爲true
的UseDefaultCredentials
創建Web服務時,您可以輕鬆地將其傳入。
public webService _webService = new webService() { UseDefaultCredentials = true };
您還可以爲您的Web服務項目禁用NTLM身份驗證。您可以在Project Properties -> Web
下執行此操作。如果取消選中此選項,則應該能夠添加Web服務而無需進行身份驗證。
UPD: Web服務,這是我想在我的控制檯應用程序使用已經得到了匿名身份驗證。 在我的控制檯應用程序中我找不到項目屬性 - > Web。 – Nikita
這將在您的Web服務下,而不是在客戶端下。 – eandersson
「您也可以爲您的Web服務項目禁用NTLM身份驗證,您可以在Project Properties - > Web下執行此操作。如果取消選中此選項,則應該能夠添加Web Service而無需進行身份驗證。 - 就像我之前提到的那樣,Web服務具有匿名身份驗證。所以我可以通過瀏覽器打開網頁服務頁面。當我使用瀏覽器打開服務uri時,它(瀏覽器)向我顯示一個輸入用戶名和密碼的窗口。我只提供代理服務器憑據。 – Nikita
我無法使用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"();
很高興你到達那裏了 – WooHoo
你看了我的最後一條評論嗎?它*應該*自動爲你做這個,基於你的IE設置 – eandersson
我不知道還有什麼配置來使它自動工作,也許我們的代理阻止某種流量,但我認爲http足以添加引用。 – Nikita
我花了近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" />
+1 Gem!Simple and worked。 – HockeyJ
成員'serviceConnection.Proxy'屬於哪個類? –
完美解決方案,實際上我想避免默認代理設置,我複製你的想法和殘疾人代理在配置
當我做所以我得到一個錯誤操作是無效的,由於對象的當前狀態。 – Nikita
我已經更新了我的答案,讓我知道如果有幫助。 – WooHoo
我已經嘗試將此設置添加到app.config並且錯誤仍然發生。當我添加Web引用時,我可以看到服務描述。我必須鏈接到2種服務方法。另外我爲代理配置IE選項。 – Nikita