2010-07-14 90 views
2

我有一個小實用程序,它是一個SOAP WebService客戶端。 SOAP代理從WSDL生成。它工作正常。如何使用SQUID代理驗證.NET2 Webservice

現在客戶想要使用SQUID代理,但拒絕認證我的SOAP客戶端。

我已經嘗試:

MyWebservice ws = new MyWebservice(); 
// set URL etc. 
// login for the actual service, this part works 
HeaderLogin hl = new HeaderLogin(); 
hl.username = svcLogin; 
hl.password = svcPassword; 
ws.HeaderLoginValue = hl; 

// setting up the Proxy of the Proxy 
//ws.Proxy = System.Net.WebRequest.GetSystemWebProxy(); 
ws.Proxy = System.Net.WebRequest.DefaultWebProxy; 

//ws.Proxy.Credentials = CredentialCache.DefaultCredentials;     
ws.Proxy.Credentials = new NetworkCredential(proxyUser, proxyPassword, proxyDomain); 

但我不斷收到HTTP 407錯誤:要求代理身份驗證。

SQUID(squid/2.7.STABLE4)設置爲使用NTLM和AD進行身份驗證。這似乎工作正常:有其他WebService客戶端通過代理服務器正常。

我沒有直接訪問網站,但只有一些日誌文件來看。最顯着的是我可以在PCAP(Wireshark)文件中看到的東西。當我在PCAP創建以用戶名=「漢克」一個的NetworkCredential,域名=「TEST」它顯示爲

... HTTP CONNECT someurl:443 HTTP/1.1 , NTLMSSP_AUTH, User: T\H

當我看PCAP爲工作服務

... HTTP CONNECT someurl:443 HTTP/1.0 , NTLMSSP_AUTH, User: TEST\Henk

而且在SQUID acces.log所有嘗試被示出爲:

... 0 192.168.15.95 TCP_DENIED/407 1759 CONNECT someurl:443 - NONE/- text/html
... 32 192.168.15.95 TCP_DENIED/407 2055 CONNECT someurl:443 - NONE/- text/html
... 31 192.168.15.95 TCP_DENIED/407 1759 CONNECT someurl:443 - NONE/- text/html

混凝土問題:

  • .NET2 SOAP和Squid的任何已知問題?
  • 是TEST \ Henk顯示T \ H顯着嗎?
  • 其他我應該找的東西?
+0

隨意的事情來檢查:哪裏PROXYUSER,對proxyPassword和proxyDomain行是從哪裏來的?在達到這一點之前是否有可能意外地錯誤? 'proxyUser = form.Fields [「ProxyUser」] [0]'而不是'proxyUser = form.Fields [「ProxyUser」]'也許? – Stobor 2010-07-22 07:44:47

+0

@Stobor:好點,但我會稱之爲'系統',而不是'隨機'。全部檢查並重新檢查。 – 2010-07-22 08:30:39

+0

@亨克 - 你有沒有解決這個問題?儘管所有瀏覽器都使用代理進行身份驗證,但WebClient在禁用身份驗證時仍然有效,但我仍然使用WebClient拒絕使用Squid代理進行身份驗證。 – 2014-02-28 11:33:32

回答

2

T \ H可能表示您將Unicode字符串用作ASCII字符串。由於Unicode字符是兩個字節(Windows上最常見的情況),因此如果將它們解釋爲ASCII,則會得到真實字符和空終止符字節。

我不希望在.NET應用程序中看到這種類型的錯誤,但你永遠不知道。

+0

我會明天嘗試,但我認爲標題中有一個名爲UnicodeNegotiate的標誌。 T \ H的東西也可能來自WireShark。 – 2010-07-19 19:31:39

+0

你可以看看WireShark中的原始字節,它會告訴你它是WireShark還是隻是數據的發送者。 – Nasko 2010-07-20 22:10:49

+0

我喜歡這個建議,你測試過Henk嗎? – Segfault 2010-07-22 12:49:02

0

我看到魷魚日誌顯示訪問被拒絕someurl:443 ...端口443是一個安全通道端口(SSL)。通常,SSL上託管的Web服務需要某種身份驗證。請檢查網絡服務憑證要求。您可能必須通過證書或通過證書將自己認證爲有效的客戶端。

+0

ajay,你是對的,但我們有這一切(和工作)。這只是代理和407封鎖我們的錯誤。 – 2010-07-22 06:42:34

+0

你可以嘗試設置「http_access允許」到你的squid配置域 – 2010-07-22 07:07:32

4

有可能在連接完成之前NTLM連接正在被回收,導致新的/秒的匿名連接請求和407錯誤。

嘗試覆蓋GetWebRequest(Uri uri)方法並將KeepAlive屬性設置爲false。

編輯Reference.cs具有下列文件:

protected override WebRequest GetWebRequest(Uri uri) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri); 
    webRequest.KeepAlive = false; 
    return webRequest; 
} 

只記得更新Web引用將導致Visual Studio重新生成該文件,你會需要重新修改文件。

+0

我不能在下週之前測試它,但我想這不是問題,我可以在日誌中看到其他(工作)客戶端也使用KeepAlive = true。 – 2010-07-23 08:46:46

0

可以嘗試添加「的http_access允許」域在你的魷魚配置