0

我一直试图在进行服务调用之前拦截请求。

在客户端使用 WCF 可扩展性

这背后的想法是在请求中添加某些属性,以便在针对 ServiceContract Schema 验证请求时,请求必须显示为有效。

我按照这里的建议使用了 IParameterInspector 和 BehaviorExtension -

将 C# WCF 可扩展性代码移动到配置文件

然而,似乎服务请求正在客户端验证,甚至在调用到达IParameterInspecter public object BeforeCall(string operationName, object[] inputs)方法之前。我打算在其中添加属性。

但就在拨打服务电话时,出现以下错误 -

通信对象 System.ServiceModel.ChannelFactory`1[SomeService.IServiceContract] 无法用于通信,因为它处于故障状态。

我应该在哪里拦截服务调用,以向请求添加属性。

必须确保在客户端针对模式验证请求之前执行此操作。

4

1 回答 1

0

故障通道通常是由服务响应客户端请求而引发的意外异常(未在合同中明确定义)引起的。如果它发生在BeforeCall它可能来自不同的原因之前。

想到的第一个是您错误地插入IParameterInspecter并且没有通过它,您应该首先测试它是否正确插入简化的场景。

如果不是,它可能来自establishSecurityContext="true"消息安全性定义的服务方法调用之前生成的身份验证请求,身份验证请求因意外异常而被拒绝,它使通道出现故障并且您不能再使用它。

没有足够的信息让我考虑其他可能的原因。您应该首先检查这些,然后返回其他代码和/或配置示例以进行进一步调查。

于 2012-10-03T12:20:19.217 回答