我有这段代码:

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身份,这会导致以后未经授权。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top