我已经编写了使用.net 3.5 WebService的WPF 4.0 Windows应用程序。当托管Web服务以允许匿名连接时,此方法工作正常,但是上线时我需要使用的WebService将保存在启用了集成身份验证的网站内。

运行WPF应用程序的人将登录到与Web服务器位于同一域中的计算机,并且如果使用启用了NTLM身份验证的Web浏览器浏览该WebService,则有权查看该WebService(无需输入任何身份验证信息)。

是否可以将运行应用程序的已登录用户的详细信息传递给WebService?

这是我当前正在使用的代码:

MyWebService.SearchSoapClient client = new SearchSoapClient();
//From the research I've done I think I need to something with these:
//UserName.PreAuthenticate = true;
//System.Net.CredentialCache.DefaultCredentials;
List<Person> result = client.FuzzySearch("This is my search string").ToList();

任何指针,不胜感激。

这是当前拨打电话时收到的错误消息:

最佳答案

因此,事实证明,就我而言,解决此问题的方法非常简单。

在App.Config文件中WebService的绑定(bind)配置中,我对此进行了更改:

<security mode="None">
  <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
 <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>

对此:
<security mode="TransportCredentialOnly">
 <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
 <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>

注意我更改了Mode和clientCredentialType属性。

并且在后面的代码中,我在调用WebService上的方法之前添加了以下行:
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

关于.net - 从WPF Windows应用程序使用具有集成身份验证的WebService,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2476290/

10-14 02:44