0

我正在开发一个使用 Microsoft SQL 服务器的 .NET 项目。在这个项目中,我需要一个使用远程 Web 服务的 CLR 存储过程(用 C# 编写)。因此,当存储过程在 SQL 服务器上执行时,它会进行 Web 服务调用,从而将数据包发送到远程位置。问题是,在执行 SP 时,我得到:“System.Net.WebException:请求失败,HTTP 状态 403:禁止。”

数据库用户拥有完全权限,部署的 CLR 程序集和 SP 甚至被标记为“不安全”,我尝试对其进行签名等,所以这些都不会导致问题。

当我执行相同的 C# 代码,但从简单的控制台应用程序而不是作为 SP 时,一切正常。因此,我开始怀疑与网络相关的问题,并在执行 SP 和控制台应用程序版本时运行了数据包嗅探器。

我意识到发出的数据包具有不同的目标 IP 地址:控制台应用程序将数据包直接发送到 Web 服务 IP,而 SP 将数据包发送到我们公司使用的代理服务器。由于网络政策,后者是不允许的,这解释了“403 Forbidden”异常。

所以我的问题归结为:如何将 SP/MS SQL 服务器配置为不使用该代理?我希望它将数据包直接发送到 Web 服务 IP,就像测试控制台应用程序一样。(同样,C# 代码是相同的,所以这不是编程问题)。

我已经禁用了 Internet Explorer 中的所有代理设置,以防 SQL 服务器继承这些设置或其他东西。然而,没有运气。

任何帮助将不胜感激!

最好的问候,彼得

4

2 回答 2

2

不要从 SQL CLR 进行 HTTP Web 调用。

从外部进程进行所有 Web 服务调用。除非您想发现您的生产服务器在 CLR 事件中阻塞的所有线程中冻结在工人饥饿中。你被警告了。

于 2010-05-16T19:47:26.260 回答
0

最可能的解释是某种网络级别的透明代理。我会与管理/管理您的网络的任何人讨论这个问题。

于 2010-05-16T15:55:11.473 回答