1

我有这个代码:

using ( var site = new SPSite( myUrl ) ) {
    using ( var web = site.AllWebs[0] ) {
        // read-only operations
    }
}

“myUrl”是 WSS 3.0 的顶级域 URL。身份验证设置为 Windows。如果我从“external_app_user”帐户下的命令行运行此代码,一切都很好。但是,如果我从 web 服务(WSS web 应用程序之外)运行此代码,则结果是 http 响应“401 UNAUTHORIZED”而不是 SOAP 响应。这很奇怪,因为这段代码在“try-catch”块中,如果抛出任何异常,我在 SOAP 响应中返回了自己的错误消息。

该代码与 WSS 在同一台机器上运行。

如果我在运行 web 服务的机器上从 webbroser 运行 web 服务,则会显示经典的 windows 登录表单。如果我在另一台计算机上从 webbrowser 运行 web 服务,我只会得到“401 UNAUTHORIZED”http 响应。

Web 服务在正确的帐户下运行。此帐户可以访问 WSS(通过 sharepoint 网站测试)。如果我尝试获取“System.Security.Principal.WindowsIdentity.GetCurrent().Name”,则会返回正确的用户名。

在 web.config 中设置了“<identity impersonate="true" userName="_my_username_" password="_my_password_" />。

有人知道出了什么问题吗?

4

3 回答 3

2

您无法捕获 401 的原因是因为 SharePoint 对此异常有自定义处理,请参阅此线程:无法捕获 SharePoint 访问被拒绝错误(包括如何将其关闭的建议)。

于 2009-07-30T18:26:15.863 回答
1

如果允许匿名和 Windows 身份验证,您可以签入 IIS。然后它可能允许您以匿名身份通过,而不是读取您的 Windows 身份,这会导致以后未经授权。

于 2009-07-30T10:05:14.617 回答
1

我找到了解决方案:http: //solutionizing.net/2009/01/06/elegant-spsite-elevation/

于 2009-07-30T12:22:01.760 回答