通信对象不能用于通信,因为它处于Faulted状态

时间:2016-03-03 06:05:07

标签: wcf c#-4.0 server-communication

我正在使用Winform客户端的WCF服务。我通过多次调用WCF服务来创建数据缓存。

我的一个服务电话因错误而失败......

The communication object, System.ServiceModel.Security.SecuritySessionClientSettings 1 + ClientSecurityDuplexSessionChannel [System.ServiceModel.Channels.IDuplexSessionChannel]不能用于通信,因为它处于Faulted状态。

代码块,抛出错误...

 return _wcfClient.GetGroups().ToList());

此错误行为是随机的。有时候它没有任何问题,有时会抛出错误 我厌倦了调试问题,但客户端调用永远不会到达WCF服务。

可以帮助我理解为什么会发生这种情况以及如何解决它。

代码更新的问题:

我正在使用casle windsor DI来解决依赖关系。 这就是如何向DI注册服务......

 container.Register(Component.For<IWCFDataService>()
                                    .AsWcfClient(DefaultClientModel.On(
                                        WcfEndpoint.ForContract<IWCFDataService>().FromConfiguration("Binding_IWCFDataService")))
                                    );

然后将在类构造函数

中注入依赖项

致电服务的代码

public List<string> SomePRoperty
        {
            get
            {
                lock (_lockObjectSomePRoperty)
                {                    
                       return _localvariable ?? (_localvariable = wcfClientResolvedFromDI.GetGroups().ToList());
                }
            }
            set { _localvariable = value; }
        }

1 个答案:

答案 0 :(得分:0)

如果传递处于无效状态的对象,则会发生此错误。例如,假设GetGroups返回一组Group对象,这样Group就包含一个枚举字段,比如GroupType。然后,如果服务器端使用无效的枚举值准备集合,例如,(GroupType)36252,而C#没有对此类转换抛出异常(请参阅Why does casting int to invalid enum value NOT throw exception?),则更严格的WCF会抛出安全性 - 相关的异常,好像有些东西搞砸了你的价值观。