WCF消息检查器

3
我们有一个传统的中间件应用程序,并希望为其实现WCF适配器。暂且说,在这段时间里,我们只需要消费WCF服务。这个中间件能够处理XML消息。我们想要从中间件获取消息XML,将其转发给WCF客户端。在收到响应后,我们希望用响应XML来回复中间件。
以下是我们关注的几点:
1. 我们应该能够发送原始XML而不是基于对象的WCF调用。 2. 在经过所有WCF层之后接收XML(这很重要,因为XML本身的验证应该已按照合同执行),我们将把它转发给中间件。 3. 我们的中间件实现了经典的Web服务,但数据契约序列化器存在各种问题。其中之一是对象引用。正如我们已经看到的那样,通过在XML元素中使用id属性来保留对象的引用。我们应该如何处理?对于数据契约序列化器,还有其他需要考虑的事情吗? 4. 中间件关心原始消息本身。我们希望WCF代理自己处理其他与消息相关的属性,如SOAP、WS-Security等。 5. 有人知道Biztalk适配器如何工作吗?
欢迎提供任何反馈。
1个回答

1

1) 你要找的是POX(Plain Old XML)。WCF使用WebHttpBinding支持此功能。这是一个很好的起点。

严格来说,它不是“原始XML”,因为WCF决定发送什么,但输出的是一个普通的XML文档而不是SOAP消息。如果即使使用POX也无法让WCF发送您想要的内容,则跳过该组件并直接打开到中间件层的套接字并直接发送XML可能更有意义。在这种情况下,您确实可以发送与传统中间件应用程序期望的完全相同的内容。WCF仍然可以处理面向客户端的连接。

2) 如果您有一个面向客户端的WCF服务,则WCF将解析客户端消息并在您的代码中给出某种对象(取决于服务契约)。此时,由您的WCF服务代码决定是否使用另一个WCF连接联系中间件,或者如我所提到的打开套接字并发送必要的请求。但是,在服务方法开始之前,会为您剥离WCF的“东西”。

4) 这应该没有问题。在将任何内容发送到中间件之前,WCF和您的代码将处理它。

希望这能有所帮助。 :)

你的答案看起来很有潜力。但我还有其他事情要和你讨论。1)WebHttpBinding看起来不错,但我们不能强制WCF服务器为我们更改到这个特定的绑定,因为那可能是外部系统。关系可以解释为(我们的中间件)<->(我们的WCF适配器)<->(外部WCF服务器)。是的,套接字是我们的最后选择。但套接字并不总是答案。我们还必须考虑MSMQ和命名管道绑定。3)DataContract序列化程序非常重要,我们该怎么办? - Mubashir Khan
对于第三点,我不了解足够的信息来帮助你,很抱歉。:( 关于第一点,当与中间件通信时,您应该使用webhttpbinding。它的外部面可以使用当前正在使用的任何绑定或您需要的绑定。两者不必相同,并且在它们之间进行转换很容易。(您的服务接收请求,打开到中间件的客户端连接,并将其发送过去。WCF处理格式。)但是,如果要求过于严格,则使用套接字与中间件通信可能是最好的方法,因为您不必尝试任何黑客行为。 - Tridus
授予您积分,因为您回答了大多数问题。 - Mubashir Khan

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