我们编写了一个 WCF 服务,部署在 IIS 上。我们选择了集成 Windows 身份验证。在这种情况下不能使用服务,但是如果我们可以将 IIS 虚拟目录的身份验证方法设置为 WCF 服务的“匿名”,那么错误就会消失。但是我们的 WCF 服务不接受“匿名”。我们必须使用集成 Windows 身份验证来验证客户端。有谁知道如何解决这个问题?
提前致谢,
阿什什
我们编写了一个 WCF 服务,部署在 IIS 上。我们选择了集成 Windows 身份验证。在这种情况下不能使用服务,但是如果我们可以将 IIS 虚拟目录的身份验证方法设置为 WCF 服务的“匿名”,那么错误就会消失。但是我们的 WCF 服务不接受“匿名”。我们必须使用集成 Windows 身份验证来验证客户端。有谁知道如何解决这个问题?
提前致谢,
阿什什
你必须做几件事:
创建以下绑定配置:
<basicHttpBinding>
<binding name="Binding1">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
将上述配置应用于您的服务和 mex:
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IService">
</endpoint>
<endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IMetadataExchange">
</endpoint>
创建一个客户端并使用 NetworkCredential 传递您的凭据:
ServiceReference.MyClient proxy = new ServiceReference.MyClient();
proxy.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("MACHINENAME\\USERACCOUNT", "passwrd");
proxy.YourServiceOperation();
还有其他方法可以单独设置用户名和密码,但它在 .Net 4.0 中不起作用。USERACCOUNT 是您的 WCF 主机加入的域帐户或 LDAP。如果服务器未加入域,则通过运行“lusrmgr.msc”在本地创建一个帐户
您需要注意两个主要事项:
这可能是给你带来问题的第二个问题。IIS 日志应包含正在调用的用户。