WCF OperationContext

时间:2009-07-31 21:21:23

标签: wcf operationcontext

我正在开发一个WCF服务,如果有错误,我想从服务上调用的原始方法序列化传入参数。我正在使用IErrorHandler来捕获所有异常。

我最初的想法是,我将序列化参数存储在OperationContext.IncomingMessageProperties中,以便我可以从HandleError方法访问它。但是,由于这不在原始线程上运行,我相信OperationContext将为null,因此我正在考虑从ProvideFault方法访问它。

这看起来可行吗?它是否适用于OneWay服务电话?

1 个答案:

答案 0 :(得分:2)

不确定我能在这里帮助你多少,但让我尝试一下:

在您的客户端上,您的代码基本上调用一个方法并传递它的参数。然后,客户端上的WCF堆栈将其转换为SOAP消息(通常使用XML主体,但也可以是二进制文件),并使用标头和all,然后通过线路将该消息发送到要处理的服务器。

然后,服务器尝试将该消息反序列化为对象,并尝试在服务器实现对象上调用消息。服务器对象上的那个方法很可能会再次具有与客户端相同的参数 - 但是,在该方法被调用之前,调用可能会失败。

所以我想说的是:你不能依赖于你的服务器端方法及其参数真正被调用的事实 - 例如,可能存在问题。身份验证,消息格式,缺少的标头或其他东西,导致服务器端失败并在服务器端方法被调用之前抛出异常。

最后,在IErrorHandler中,我无法知道如何获取消息和/或方法及其参数 - 所有你能得到的是服务器上发生的错误,你可以用它来把它变成一个SOAP错误。

你可以做什么 - 无论是在客户端还是服务器端 - 创建一个插入WCF堆栈的新行为,并记录被调用的方法和传递给它们的参数 - 通过实现一个实现的类WCF的IParameterInspector接口。但是只有在客户端和服务器上的消息被正确反序列化并且服务器端方法真的被调用时才会被调用。

查看其中一些链接,了解有关WCF可扩展性的更多信息:

希望这有点帮助!

马克