wsHttpBinding运行时Web.config写入更新后的MessageSecurityException

时间:2014-01-31 17:03:17

标签: c# asp.net .net wcf

我在 IIS 托管的 WCF 服务上使用默认wsHttpBinding

<service behaviorConfiguration="WCFService.MyBehavior" name="WCFService.MyService">
<endpoint address="" binding="wsHttpBinding" contract="Common.IMyService" name="WsHttpBinding_MyWCFService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

我知道这是不好的做法,但我的 WCF 服务必须更新web.config文件。

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
System.Configuration.ConnectionStringsSection section = config.GetSection("connectionStrings") as System.Configuration.ConnectionStringsSection;
section.ConnectionStrings["mainConnection"].ConnectionString = newValue;

System.Configuration.ConfigurationManager.AppSettings["DataProviderUsername"] = userName;
System.Configuration.ConfigurationManager.AppSettings["DataProviderPassword"] = password;

config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("connectionStrings");

我能够做到这一点,我的winforms客户端确实得到了所需的响应,但在处理客户端时会抛出异常。

using (MyClient client = new MyClient(new System.ServiceModel.WSHttpBinding(), endpoint))
                        {
                            var result = client.GetResult(myParams);

                            var success=result.succsess;//result correct

                        }//throws on disposing

这是MessageSecurityException

中的ServiceModel.Fault异常

无法处理邮件。这很可能是因为操作“http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Cancel”不正确,或者因为邮件包含无效或过期的安全上下文令牌,或者因为绑定之间存在不匹配。如果服务因不活动而中止通道,则安全上下文令牌将无效。要防止服务中止空闲会话,请过早增加服务端点绑定的接收超时。

如果我没有更新web.config文件,则不会抛出异常。 有没有办法我仍然可以在运行时使用wsHttpBinding并更新我的web.config文件?

0 个答案:

没有答案