我有这个代码:
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 web 应用程序之外)运行此代码,则结果是 http 响应“401 UNAUTHORIZED”而不是 SOAP 响应。这很奇怪,因为这段代码在“try-catch”块中,如果抛出任何异常,我在 SOAP 响应中返回了自己的错误消息。
该代码与 WSS 在同一台机器上运行。
如果我在运行 web 服务的机器上从 webbroser 运行 web 服务,则会显示经典的 windows 登录表单。如果我在另一台计算机上从 webbrowser 运行 web 服务,我只会得到“401 UNAUTHORIZED”http 响应。
Web 服务在正确的帐户下运行。此帐户可以访问 WSS(通过 sharepoint 网站测试)。如果我尝试获取“System.Security.Principal.WindowsIdentity.GetCurrent().Name”,则会返回正确的用户名。
在 web.config 中设置了“<identity impersonate="true" userName="_my_username_" password="_my_password_" />。
有人知道出了什么问题吗?