防止WCF客户端反序列化

3
我有一个WCF客户端代理,从SOAP Web服务中读取数据。我无法控制服务,只能控制客户端代理。调用服务操作的结果定义为非常大的XML模式,其中只有小部分与我的应用程序相关。
我创建了一个自定义WCF行为,允许我解析原始XML响应并仅读取相关部分。但是,代理仍然将响应反序列化为对象图(由于XML模式的复杂性,这相当复杂)。对于我的应用程序而言,这最后一步是多余的。
是否可能阻止我的WCF客户端代理执行响应的最后一步反序列化?
3个回答

2

开始定义带有操作的客户端 ServiceContract:

[OperationContract(Action="YourAction", ReplyAction="YourResponseAction")]
Message YourMethod(Message request)

然后使用通用ClientFactory来实例化代理。
您需要手动构建请求消息,并使用单向阅读器解析响应。

2

您希望在哪里处理您需要的消息部分?总体而言,我认为您并不需要默认的客户端代理生成器,使用自己的自定义客户端代理可能更好。

如果您能够使用该路由,则可用的一种选项是仅让代理返回 Message 对象,而不是真正的DataContract,然后您可以轻松地从SOAP正文中读取原始XML,并解析它。这比尝试与序列化程序打交道要容易得多,我个人认为。


一个自定义客户端代理似乎是个好主意。如果我要创建自己的代理,你有任何指导吗? - Tormod Fjeldskår
这真的不难。基本上,像为服务定义契约接口一样定义您的契约接口(只需确保所有名称/命名空间匹配),然后添加方法。然后创建一个从ClientBase<T>派生的类(任何svcutil生成的代码都会给您提示,非常容易)。Dmitry关于如何使用Message类的回答很好,但我要补充说,您不需要同时用它来处理输入和输出...如果您愿意,仍然可以使用DataContracts来处理请求消息。 - tomasr
这些都是有用的提示,将帮助我入门。非常感谢! - Tormod Fjeldskår

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接