2009-09-02 169 views
2

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

由于提前,

阿希什

+0

你能显示什么配置文件显示客户端和wcf服务的配置吗? – CSharpAtl 2009-09-02 13:48:48

回答

1

还有,你需要注意两两件事:

  1. 是您的配置一致:IIS,web.config中(的System.Web和WCF)
  2. 您的客户是否发送Windows请求认证信息

它可能是第二个给你带来问题的东西。 IIS日志应该包含哪个用户正在进行呼叫。

+0

其实,如果我允许集成Windows身份验证,没有匿名,然后客户端窗口应用程序无法访问服务本身,即使在服务器上,如果我浏览服务,它会告诉我以下错误 “此服务的安全设置需要'匿名'身份验证但它不支持承载此服务的IIS应用程序。“ – Kasma 2009-09-03 13:18:07

5

你要做的几件事情:

  • 取消选中匿名访问从您的虚拟forlder和检查集成的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(); 
      

还有其他的方法来设置用户名密码& indivdually但它并没有在.NET 4.0中工作。 USERACCOUNT是WCF主机加入的域帐户或LDAP。 如果服务器未加入域,则通过运行“lusrmgr.msc”在本地创建一个帐户