C# 具有Windows身份验证的WCF服务引发异常“;“未定义用户名”;即使它被定义了
我在一个C#控制台项目上使用WCF服务。此WCF服务使用Windows身份验证和HTTPS,因此我修改了我的App.config,如下所示:C# 具有Windows身份验证的WCF服务引发异常“;“未定义用户名”;即使它被定义了,c#,.net,web-services,wcf,C#,.net,Web Services,Wcf,我在一个C#控制台项目上使用WCF服务。此WCF服务使用Windows身份验证和HTTPS,因此我修改了我的App.config,如下所示: 如您所见,我指定了安全模式TransportWithMessageCredential,将传输作为Windows客户端凭据类型 在我的代码隐藏中,我确实指定以下Windows凭据: TestYannisSOAPPortTypeClient=newtestyannissoapporttypeclient(); client.ClientCredentia
如您所见,我指定了安全模式TransportWithMessageCredential
,将传输作为Windows客户端凭据类型
在我的代码隐藏中,我确实指定以下Windows凭据:
TestYannisSOAPPortTypeClient=newtestyannissoapporttypeclient();
client.ClientCredentials.Windows.ClientCredential.UserName=“yannis”;
client.ClientCredentials.Windows.ClientCredential.Password=“xxxxxx”;
在运行时,我收到以下异常:
System.InvalidOperationException:未定义用户名。在ClientCredentials中指定用户名
我可以通过如下方式指定用户名和密码来消除此异常:
client.ClientCredentials.UserName.UserName=“yannis”;
client.ClientCredentials.UserName.Password=“xxxxxx”;
但是,这次我从远程服务器得到一个异常,它不希望我以这种方式进行身份验证。为什么它只在客户端.ClientCredentials
中挖掘,而不在窗口.ClientCredential
中挖掘
我可以说,WCF服务通过使用名为Ready的服务测试软件在服务器端工作!应用程序编程接口。以下是完全相同请求的屏幕截图:
我猜问题出在我的App.config上,但我已经尝试了所有方法。安全模式为
传输
,有或没有消息
对象等。这是由于应用程序配置的这一行:
<message clientCredentialType="UserName" algorithmSuite="Default" />
但我不明白你为什么要修改你的应用程序配置。通常,当您添加服务引用时,它会基于服务的wsdl生成正确的绑定。
要使用windows身份验证,您应该在绑定中写入以下内容:
<binding name="TestYannisSOAPBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" ... />
</security>
</binding>
您可以随时尝试此案例:
<binding name="TestYannisSOAPBinding">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="Windows"/>
</security>
</binding>
您不需要指定运输安全标签。由于您使用HTTPS连接进行安全保护,因此传输已经安全。对于此安全模式,应用程序中的传输标记将不起作用。对于收到的错误,请确保仅在IIS中启用匿名身份验证。然后再次尝试运行应用程序。嘿,基里尔,我想你错过了CTRL+V。你在说哪一行?不幸的是,在我的例子中,仅仅添加服务引用并不能生成正确的App.Config。。。默认情况下没有HTTPS和Windows身份验证。谢谢,但我应该写什么?clientCredentialType只能有证书或用户名值。。。两者都不起作用。根本不应该添加此行。应该是这样的:它也不起作用。首先,只有两种安全模式可用:“Transport”和“TransportWithMessageCredential”。如果我按照您的建议切换到传输并删除行,我将收到System.ServiceModel.Security.MessageSecurityException类型的异常,该异常表示我的HTTP请求未通过“Negociate”身份验证方案进行授权。从服务器收到的身份验证标头是“Basic realm=xxxxxx”内部异常中的错误401如果您写的不是“UserName”怎么办?