【发布时间】:2015-07-30 13:36:18
【问题描述】:
我有一个使用用户名和密码保护的 WCF 服务。 我写了一个简单的客户端,但是当我尝试调用 Web Service 方法时,我收到 SecurityNegotiationException 异常。
Web服务的配置如下:
<services>
<service name="MyServ.Service1"
behaviorConfiguration="MyBehavior">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="MyBindingConfiguration"
contract="MyServ.IService1" />
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="MyBindingConfiguration">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpsGetEnabled="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="true"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyServ.CustomValidator, MyServ"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
客户端程序如下所示:
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
var endpointAddress = new EndpointAddress(@"https://localhost:8083/MyServ/Service1.svc");
using (var service = new Service1Client(binding, endpointAddress))
{
var loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = @"user";
loginCredentials.UserName.Password = @"password";
var defaultCredentials = service.Endpoint.Behaviors.Find<ClientCredentials>();
service.Endpoint.Behaviors.Remove(defaultCredentials); //remove default ones
service.Endpoint.Behaviors.Add(loginCredentials); //add required ones
var data = service.GetData(100);
Console.WriteLine(data);
Console.ReadLine();
}
每次执行 service.GetData(100) 时,我都会收到 SecurityNegotiationException 异常。
有人可以帮忙吗?
【问题讨论】:
-
作为一个想法...你可以初始化 service.ClientCredentials.UserName.UserName 和 ervice.ClientCredentials.UserName.Password 而是创建一个新的并删除删除默认 ClientCredentials
-
我听从了您的建议,但没有帮助。存在同样的错误。
-
如果你在你的服务器验证器上进入验证方法,你能检查调试器吗?
-
这是另一个问题。我没有得到验证方法。你能猜到为什么吗?