我正在开发一个WCF服务,如果出现错误,我希望从服务上调用的原始方法序列化传入的参数。我使用IErrorHandler捕获所有异常。
我最初的想法是将序列化的参数存储在OperationContext.IncomingMessageProperties中,以便可以从HandleError方法访问它。但是,由于这不是在原始线程上运行的,所以我相信OperationContext将为null,所以我正在考虑从ProvideFault方法访问它。
这似乎可行吗?它是否适用于OneWay服务调用?
发布于 2009-08-02 08:05:32
我不确定我在这里能帮到你多少,但让我试试:
在您的客户机上,您的代码基本上调用一个方法并传递它的参数。客户端的WCF堆栈然后将其转换为SOAP消息(通常带有XML主体,但也可以是二进制的),具有标头和全部,然后将该消息发送到要处理的服务器。
然后,服务器尝试将该消息反序列化为一个对象,并尝试调用服务器实现对象上的消息。服务器对象上的方法很可能再次具有与客户端相同的参数-但是,在调用该方法之前,调用可能会失败。
所以,我想说的是:您不能依赖这样一个事实,即您的服务器端方法及其参数确实被调用--例如,身份验证、消息格式、缺少的头或其他东西可能会出现问题,导致服务器端失败,甚至在服务器端方法被调用之前就抛出异常。
最后,在IErrorHandler中,我不知道如何获取消息和/或方法及其参数--您所能得到的只是服务器上发生的错误,您可以使用该错误将其转化为SOAP错误。
在客户机和服务器端,您可以做的是创建一个新的行为,将其插入到WCF堆栈中,并通过实现实现WCF的IParameterInspector接口的类来记录正在调用的方法和传递给它们的参数。但是,只有当客户机和服务器上的消息被正确反序列化并且服务器端方法真正被调用时,这才会被调用。
有关WCF扩展性的更多信息,请查看其中的一些链接:
希望这能帮点忙!
Marc
https://stackoverflow.com/questions/1214963
复制相似问题