2010-05-16 23 views
0

我正在使用Microsoft SQL Server的.NET項目。在這個項目中,我需要一個使用遠程Web服務的CLR存儲過程(用C#編寫)。所以,當存儲過程在SQL服務器上執行時,它會進行Web服務調用,從而將數據包發送到遠程位置。問題是,執行SP時,我得到: 「System.Net.WebException:請求失敗,HTTP狀態403:禁止。」如何從SQL存儲過程配置傳出連接?

數據庫用戶具有完全權限,部署的CLR程序集和SP甚至標記爲「不安全」,我嘗試對其進行簽名等,因此任何這些都不會導致問題。

當我執行完全相同的C#代碼,但從一個簡單的控制檯應用程序而不是一個SP,它一切正常。所以我開始懷疑網絡相關的問題,並且在執行SP和控制檯應用程序版本時運行了數據包嗅探器。

我意識到發出的數據包有不同的目標IP地址:控制檯應用程序將數據包直接發送到Web服務IP,而SP將數據包發送到我們公司使用的代理服務器。由於網絡政策,後者是不允許的,並解釋了「403禁止」例外。

所以我的問題歸結爲:我怎樣才能配置SP/MS SQL服務器不使用該代理?我希望它將數據包直接發送到Web服務IP,就像測試控制檯應用程序一樣。 (再次,C#代碼是相同的,所以它不是一個編程問題)。

我已禁用Internet Explorer中的所有代理設置,以防SQL服務器繼承這些設置或其他內容。但是,沒有運氣。

任何幫助將不勝感激!

最好的問候, 彼得

回答

0

最可能的解釋是某種網絡級透明代理的。我會與管理/管理你的網絡的人討論這個問題。

2

不要從SQL CLR進行HTTP Web調用。

進行外部進程的所有Web服務調用。除非你想找到你的生產服務器在CLR事件中阻塞所有線程的情況下被凍結在工作者飢餓中。你被警告了。