Web服务中的SPSite会引发401错误
-
05-07-2019 - |
题
我有这段代码:
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响应。这很奇怪,因为这段代码在<!> quot; try-catch <!>中;阻止,如果抛出任何excception,我在SOAP响应中返回自己的错误消息。
代码与WSS在同一台机器上运行。
如果我在运行Web服务的计算机上从webbroser运行web服务,则会显示经典的Windows登录表单。如果我在另一台计算机上从webbrowser运行web服务,我只得到<!>“401 UNAUTHORIZED <!>”; http响应。
网络服务正在正确的帐户下运行。此帐户可以访问WSS(通过sharepoint网站测试)。如果我尝试获取<!>“; System.Security.Principal.WindowsIdentity.GetCurrent()。Name <!> quot;返回正确的用户名。
在web.config中设置<!> quot; <!> lt; identity impersonate = <!> quot; true <!> quot; USERNAME = QUOT <!>; <!> _my_username _ QUOT;密码= QUOT <!>; <!> _my_password _ QUOT; / GT <!>;
任何人都知道出了什么问题?
解决方案 3
其他提示
您无法捕获401的原因是SharePoint已针对此异常进行自定义处理,请参阅此主题:无法捕获SharePoint Access拒绝错误(包括建议如何将其关闭)。
如果允许匿名和Windows身份验证,您可以检入IIS。然后它可能允许您以匿名方式通过,而不是阅读您的Windows身份,这会导致以后未经授权。