2010-05-16 27 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事件中阻塞所有线程的情况下被冻结在工作者饥饿中。你被警告了。