我正在尝试从客户端控制台应用程序访问服务器上的WCF服务以进行测试。我收到以下错误:
来电者未经过身份验证 服务
我正在使用wsHttpBinding
。我不确定服务期望的身份验证类型是什么?
<behaviors>
<serviceBehaviors>
<behavior name="MyTrakerService.MyTrakerServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
更新的
如果我将绑定更改为<endpoint "basicHttpBinding" ... />
(来自wsHttpBinding),它会起作用
在IIS 7.0托管,Windows 2008服务器
答案 0 :(得分:25)
如果使用basicHttpBinding,请将端点安全性配置为“None”,并将clientCredintialType传输为“None”。
<bindings>
<basicHttpBinding>
<binding name="MyBasicHttpBinding">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint
binding="basicHttpBinding"
bindingConfiguration="MyBasicHttpBinding"
name="basicEndPoint"
contract="IMyService"
/>
</service>
此外,请确保IIS中的目录身份验证方法启用匿名访问
答案 1 :(得分:23)
我明白了。
如果你想使用wshttpbinding,你需要添加如下的Windows凭证。
svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";
感谢
答案 2 :(得分:4)
您是否尝试过使用basicHttpBinding而不是wsHttpBinding?如果不需要任何身份验证并且不需要Ws- *实现,那么使用普通的basicHttpBinding可能会更好。 WsHttpBinding实现了WS-Security以实现消息安全和身份验证。
答案 3 :(得分:2)
在虚拟目录中设置匿名访问
将以下凭据写入您的服务
ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";
之后,您将调用您的Web服务方法。
答案 4 :(得分:1)
如果您使用像我这样的自托管站点,避免此问题的方法(如上所述)是在主机和客户端都规定wsHttpBinding安全模式= NONE。
在客户端和主机上创建绑定时,您可以使用以下代码:
Dim binding as System.ServiceModel.WSHttpBinding
binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)
或
System.ServiceModel.WSHttpBinding binding
binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
答案 5 :(得分:1)
我可以按照以下步骤解决共享问题:
答案 6 :(得分:0)
我们遇到了一个奇怪的问题,即托管WCF服务的文件夹有一些导致问题的权限。
答案 7 :(得分:0)
如果需要在webconfig中指定域(验证客户端使用的用户名和密码),可以将其放在system.serviceModel服务服务部分中:
<identity>
<servicePrincipalName value="example.com" />
</identity>
并在客户端指定域名,用户名和密码:
client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
client.ClientCredentials.Windows.ClientCredential.Password = "Password";
答案 8 :(得分:0)
如果客户端位于与服务器不同的域中,则可能导致此错误。
我在从我的PC(客户端)到我的(云)测试服务器测试我的一个应用程序时遇到了这个问题,而我能想到的最简单的解决方案是设置一个vpn。
答案 9 :(得分:0)
我在wsHtppBinding
中也遇到了同样的问题。而且我只需要添加指向security
的{{1}}模式,就可以解决我的问题,而无需切换到none
。 Check Here并检查如何禁用WCF安全性。检查以下配置更改以供参考:
basicHttpBinding
答案 10 :(得分:-1)
为什么不能为wsHttpBinding(“none”而不是“message”或“transport”)完全删除安全设置?