我正在开发一个使用Microsoft SQL服务器的.NET项目。在这个项目中,我需要一个使用远程Web服务的CLR存储过程(用C#编写)。因此,当在SQL服务器上执行存储过程时,它会进行Web服务调用,从而将数据包发送到远程位置。问题是,在执行SP时,我得到: “System.Net.WebException:请求失败,HTTP状态为403:Forbidden。”
数据库用户拥有完全权限,部署的CLR程序集和SP甚至标记为“不安全”,我尝试签名等等,因此任何一个都不会导致问题。
当我执行相同的C#代码时,但是从简单的控制台应用程序而不是SP,它一切正常。所以我开始怀疑与网络相关的问题,并在执行SP和控制台应用程序版本时运行了数据包嗅探器。
我意识到发送的数据包具有不同的目标IP地址:控制台应用程序将数据包直接发送到Web服务IP,而SP将数据包发送到我们公司使用的代理服务器。由于网络政策,后者是不允许的,这解释了“403 Forbidden”例外。
所以我的问题归结为:我如何配置SP / MS SQL服务器不使用该代理?我希望它将数据包直接发送到Web服务IP,就像测试控制台应用程序一样。 (同样,C#代码是相同的,所以它不是编程问题。)
我已禁用Internet Explorer中的所有代理设置,以防SQL Server继承这些设置或其他内容。但是,没有运气。
非常感谢任何帮助!
祝你好运, 彼得
答案 0 :(得分:2)
不要从SQL CLR进行HTTP Web调用。
从外部进程进行所有Web服务调用。除非您希望在CLR事件中阻止所有线程在工作者饥饿中冻结生产服务器。你被警告了。
答案 1 :(得分:0)
最可能的解释是某种网络级透明代理。我会与管理/管理您的网络的人讨论这个问题。