2

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

我的一个服务调用因错误而失败...

The communication object, System.ServiceModel.Security.SecuritySessionClientSettings1+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; }
        }
4

1 回答 1

0

如果您传递处于无效状态的对象,则会发生此错误。例如,假设 GetGroups 返回一个 Group 对象的集合,例如 Group 包含一个枚举字段,例如 GroupType。然后,如果服务器端使用无效枚举值准备集合,例如 (GroupType)36252,而 C# 在此类转换中不会引发异常(请参阅Why does cast int to invalid enum value NOT throw exception?),越严格WCF 抛出与安全相关的异常,就好像某些东西弄乱了您的值一样。

于 2017-09-04T15:30:45.827 回答