我的应用程序调用在生产中使用SSL但在本地开发计算机上不使用SSL的WCF服务。因此,要在dev中运行,我当前必须更新app.config以使用没有security
节点的绑定配置。
E.G。而不是
<binding ...>
<security mode="Transport">
<message clientCredentialType="Windows" />
</security>
</binding>
我只是
<binding ...>
</binding>
我希望根据我的解决方案的主动构建配置在运行时设置此设置。我已经在EndpointAddress
方法的覆盖中设置ClientCredentials
和CreateChannel()
,所以我当时尝试删除安全性,如下所示:
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;不正确或因为邮件包含无效或过期的安全上下文令牌,或者因为绑定之间存在不匹配。如果服务因不活动而中止通道,则安全上下文令牌将无效。要防止服务中止空闲会话,请过早增加服务端点绑定的接收超时。
你知道为什么这不起作用吗?