我有这个代码:
using ( var site = new SPSite( myUrl ) ) {
using ( var web = site.AllWebs[0] ) {
// read-only operations
}
}
“myUrl”是 WSS 3.0 的顶级域 url。身份验证设置为 Windows。 如果我从“external_app_user”帐户下的命令行运行此代码,一切都很好。但是,如果我从 web 服务(在 WSS webapplication 之外)运行此代码,则结果是 http 响应“401 UNAUTHORIZED”而不是 SOAP 响应。这很奇怪,因为这段代码在“try-catch” block 中,如果抛出任何异常,我会在 SOAP 响应中返回自己的错误消息。
代码与 WSS 在同一台机器上运行。
如果我在运行网络服务的机器上从 webbroser 运行网络服务,则会显示经典的 Windows 登录表单。如果我从另一台计算机上的网络浏览器运行网络服务,我只会收到“401 UNAUTHORIZED”http 响应。
Web 服务在正确的帐户下运行。此帐户可以访问 WSS(通过 Sharepoint 网站测试)。如果我尝试获取“System.Security.Principal.WindowsIdentity.GetCurrent().Name”,则会返回正确的用户名。
在 web.config 中设置“
谁知道哪里出了问题?
请您参考如下方法:
您无法捕获 401 的原因是因为 SharePoint 具有对此异常的自定义处理,请参阅此线程:Cannot catch the SharePoint Access denied error (包括如何关闭它的建议)。
