2

我们编写了一个 WCF 服务,部署在 IIS 上。我们选择了集成 Windows 身份验证。在这种情况下不能使用服务,但是如果我们可以将 IIS 虚拟目录的身份验证方法设置为 WCF 服务的“匿名”,那么错误就会消失。但是我们的 WCF 服务不接受“匿名”。我们必须使用集成 Windows 身份验证来验证客户端。有谁知道如何解决这个问题?

提前致谢,

阿什什

4

2 回答 2

7

你必须做几件事:

  • 从您的虚拟文件夹中取消选中匿名访问并选中集成 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”在本地创建一个帐户

于 2010-09-07T19:50:27.400 回答
1

您需要注意两个主要事项:

  1. 您的配置是否一致:IIS、web.config(system.web 和 WCF)
  2. 您的客户端是否在请求中发送 Windows 身份验证信息

这可能是给你带来问题的第二个问题。IIS 日志应包含正在调用的用户。

于 2009-09-02T13:44:12.513 回答