我有这段代码:
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_“/>。
任何人都知道出了什么问题?
答案 0 :(得分:2)
您无法捕获401的原因是因为SharePoint已针对此异常进行自定义处理,请参阅此主题:Cannot catch the SharePoint Access denied error(包括建议如何将其关闭)。
答案 1 :(得分:1)
如果允许匿名和Windows身份验证,您可以检入IIS。然后它可能允许您以匿名方式通过,而不是阅读您的Windows身份,这会导致以后未经授权。
答案 2 :(得分:1)