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