【发布时间】:2010-08-12 23:59:19
【问题描述】:
这是我的场景:我正在处理一个 SharePoint 网站,它位于一个服务器场上。在此站点中,我创建了一个 HttpHandler,它使用位于不同服务器上的 SharePoint 搜索 Web 服务。所以看起来像这样:
- SharePoint Server A,我的站点所在的位置
- 在服务器 B 上有对 SharePoint 搜索 Web 服务的服务引用
- 具有使用服务引用调用搜索服务的 http 处理程序
- SharePoint Server B,搜索服务所在的位置
我的代码如下所示:
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
QueryServiceSoapClient _queryService = new QueryServiceSoapClient(binding, new EndpointAddress("http://easearch.ea.com/_vti_bin/search.asmx"));
_queryService.ClientCredentials.Windows.AllowNtlm = true;
_queryService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
_queryService.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
//_queryService.ClientCredentials.Windows.ClientCredential = new NetworkCredential("MyUsername", "MyPassword", "MyDomain"); //This is the only way it seems to work
//NetworkCredential userCredential = CredentialCache.DefaultCredentials.GetCredential(_queryService.Endpoint.ListenUri, "NTLM");
//_queryService.ClientCredentials.Windows.ClientCredential = userCredential;
string status = _queryService.Status();
如果我从开发盒上的控制台应用程序中使用此代码,它会按预期工作。但是当我尝试使用我的 http 处理程序中的相同代码时,它会给出错误
HTTP 请求未经授权 客户端身份验证方案“Ntlm”。 收到的认证头 来自服务器的是“NTLM”。
我已经尝试了上述代码的多种不同组合,唯一可以在我的 HttpHandler 中使用的组合是当我直接提供我的凭据时。有人有什么想法吗?
谢谢。
【问题讨论】:
标签: c# web-services sharepoint httphandler ntlm