我正在阅读很多东西来理解WCF中的各种事情。
实际上,我很快就想将现有的WSE3 Web服务移动/转换为WCF。在现有的WSE Web服务中,我有一些(数据)类可以在我们的环境中为实体建模。
在转换这些类时,我应该使用Data Contract / Data Member属性还是MessageContract属性?
1。如何在WCF中决定消息合同和数据合同? 2.绑定类型(如basicHttpBinding)在此决策中是否有任何作用? 3.在客户端创建的代理(当我们添加Web引用时)是否会根据数据或消息合同发生重大变化?
(PS:我正在尝试找到一种方法,以便现有的WSE客户端应该能够使用WCF服务而无需进行太多的更改/修改。是否可以使用从ASMX Web服务生成的当前代理连接到通过将代理的URL设置为WCF服务来实现新的WCF服务?)
答案 0 :(得分:3)
快速回答您的问题:
1)除非有特殊原因需要调整soap XML的结构,否则请使用DataContract而不是MessageContract。
2& PS)由于您当前正在使用SOAP over HTTP,因此您很可能需要为basicHttpBinding配置新服务。这将提供ASMX客户端所需的互操作性。
3)如果WCF服务创建的soap结构与当前的soap匹配,则不应该这样。
我依稀记得WSE 3.0支持一些WS- *标准。如果您当前的代码依赖于这些代码,那么您也可以为这些操作公开wsHttpBinding,但我认为默认的ASMX客户端不能与wsHttpBinding配置的服务一起使用。
答案 1 :(得分:2)
这取决于您对生成的SOAP消息的控制。 DataContract定义由操作定义的元素包装的消息体的一部分。 MessageContract定义了整个消息的结构 - 您可以使用多个主体成员,您不必使用默认包装元素,也可以将一些数据放入SOAP标头中。
在您的场景中,最重要的部分是定义WCF以使用与以前的WSE3服务相同的SOAP消息。这里重要的是你目前如何序列化数据?如果使用Xml序列化(和属性),则可以通过switchinig从数据协定序列化到xml序列化直接在WCF中使用它。
顺便说一下。你为什么使用WSE3而不是普通的ASMX?你使用邮件安全吗?在这种情况下,您将需要另一个绑定。 BasicHttpBinding无法执行消息安全性。
一般答案是肯定的,您可以创建当前客户端代理将能够使用的服务。但实际上,努力取决于您当前的服务和当前代码。