2009-07-30 48 views
1

我有这样的代码:的SPSite在Web服务抛出401错误

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”块中,如果有任何抛出,我在SOAP响应中返回了自己的错误消息。

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

如果我在web服务运行的机器上从webbroser运行webservice,将显示经典的Windows登录窗体。如果我在另一台计算机上从webbrowser运行webservice,则只能获得“401 UNAUTHORIZED”http响应。

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

在web.config中设置为 “<身份冒充=” 真”的userName = “_ my_username_” 密码= “_ my_password_”/>。

任何人有想法有什么不好?

回答

1

你可以检查在。IIS匿名如果和Windows身份验证都被允许则可以让你通过为匿名,而不是读你的Windows标识,从而导致未授权后

+0

允许匿名和Windows身份验证。 现在我得到了stacktrace,并且401 UNAUTHORIZED错误从get的“AllWebs”属性中获得。 – TcKs 2009-07-30 10:47:30