在CreateChannel覆盖

时间:2016-05-09 16:51:53

标签: c# wcf security

我的应用程序调用在生产中使用SSL但在本地开发计算机上不使用SSL的WCF服务。因此,要在dev中运行,我当前必须更新app.config以使用没有security节点的绑定配置。

E.G。而不是

<binding ...>
  <security mode="Transport">
    <message clientCredentialType="Windows" />
  </security>
</binding>

我只是

<binding ...>
</binding>

我希望根据我的解决方案的主动构建配置在运行时设置此设置。我已经在EndpointAddress方法的覆盖中设置ClientCredentialsCreateChannel(),所以我当时尝试删除安全性,如下所示:

    protected override IProcessing CreateChannel()
    {
        System.ServiceModel.EndpointAddress uri =
            new System.ServiceModel.EndpointAddress(new Uri(Properties.Settings.Default.ProcessingService),
                this.Endpoint.Address.Identity, 
                new System.ServiceModel.Channels.AddressHeader[0]);

        this.Endpoint.Address = uri;

#if DEV
        WSHttpBinding binding = (WSHttpBinding)this.Endpoint.Binding;
        binding.Security.Mode = SecurityMode.None;   //Disable security for DEV mode
        binding.Security.Message.ClientCredentialType = MessageCredentialType.None;

#else
        //set the service credentials
        this.ClientCredentials.UserName.UserName = Username;
        this.ClientCredentials.UserName.Password = Password;
#endif

但是当我在DEV模式下运行时,我得到一个例外:

  

System.ServiceModel.FaultException:无法处理消息。这很可能是因为行动&#39; ...&#39;不正确或因为邮件包含无效或过期的安全上下文令牌,或者因为绑定之间存在不匹配。如果服务因不活动而中止通道,则安全上下文令牌将无效。要防止服务中止空闲会话,请过早增加服务端点绑定的接收超时。

你知道为什么这不起作用吗?

0 个答案:

没有答案