【发布时间】:2012-02-23 23:09:18
【问题描述】:
我正在处理一个 CLR 存储过程,该过程在使用 Windows 身份验证的 ASP.NET MVC3 应用程序中调用控制器操作(其他所有功能都被禁用)。 Web 服务器是在 Windows Server 2008 R2 Standard 上运行的 IIS 7.5。数据库服务器为 SQL Server 2008 R2 企业版。这是CLR proc的代码:
[SqlProcedure]
public static void UpdateModels()
{
Uri uri = null;
HttpWebRequest rq;
HttpWebResponse rsp;
Uri.TryCreate("http://testserver/RPM/Configuration/UpdateModels", UriKind.Absolute, out uri);
rq = (HttpWebRequest)HttpWebRequest.Create(uri);
rq.Method = WebRequestMethods.Http.Get;
rsp = (HttpWebResponse)rq.GetResponse();
}
我能够毫无问题地将程序集部署到 SQL Server,但是当我运行它时,我收到以下错误:
Msg 6522, Level 16, State 1, Procedure UpdateModels, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "UpdateModels":
System.Net.WebException: The remote server returned an error: (401) Unauthorized.
System.Net.WebException:
at System.Net.HttpWebRequest.GetResponse()
at StoredProcedures.UpdateModels()
.
当我从 SQL 代理作业(在我的凭据下运行)调用 SP,当我从 SSMS 查询窗口(再次,我的凭据)或我想尝试的任何其他方法执行它时,会发生这种情况。我是 Web 应用程序的授权用户,并且能够从应用程序本身调用该控制器方法。
如果我将 URL 更改为“http://testserver”,它运行正常(当然,它什么也不做),但如果我在 URL 中添加“RPM”,它会失败,所以它似乎问题出在应用程序本身,而不是服务器或其默认站点。此外,如果我启用匿名身份验证,它会起作用,因此 Windows 凭据不会以某种方式传递到该站点。检查日志确认了这一点:
2012-02-23 12:51:33 10.1.1.1 GET /RPM/Configuration/UpdateModels - 80 - 10.2.2.2- 302 0 0 218
凭据未通过。我尝试在 CLR SP 代码中使用模拟,但这没有帮助。我确信很明显,我对这些东西很陌生,可能正在做一些愚蠢的事情。如果有人能让我走上正确的道路,我将不胜感激!
TIA,
杰夫
【问题讨论】:
标签: asp.net-mvc-3 sqlclr