Web服务中的SPSite会引发401错误

时间:2009-07-30 08:16:07

标签: c# .net asp.net sharepoint wss-3.0

我有这段代码:

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

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

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

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

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

在web.config中设置“< identity impersonate =”true“userName =”_ my_username_“password =”_ my_password_“/>。

任何人都知道出了什么问题?

3 个答案:

答案 0 :(得分:2)

您无法捕获401的原因是因为SharePoint已针对此异常进行自定义处理,请参阅此主题:Cannot catch the SharePoint Access denied error(包括建议如何将其关闭)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)