3

我正在阅读很多内容以了解 WCF 中的各种内容。

实际上,很快,我想将现有的 WSE3 Web 服务移动/转换为 WCF。在现有的 WSE Web 服务中,我有一些(数据)类对我们环境中的实体进行建模。

在转换这些类时,我应该使用 Data Contract/Data Member 属性还是 MessageContract 属性?

1. WCF 中如何选择消息契约和数据契约?2. 绑定类型(如basicHttpBinding)在这个决定中有什么作用吗?3. 在客户端创建的代理(当我们添加 Web 引用时)是否会根据数据或消息合约发生显着变化?

(PS:我正在尝试找到一种方法,以便现有 WSE 客户端能够使用 WCF 服务而无需进行太多更改/修改。是否可以使用从 ASMX Web 服务生成的当前代理连接到新的 WCF 服务只需将代理的 URL 设置为 WCF 服务?)

4

2 回答 2

3

以下是回答您的问题的快速方法:

1) 除非有特殊原因,比如调整soap XML 的结构,否则请使用DataContract 而不是MessageContract。

2 & PS) 由于您当前使用的是基于 HTTP 的soap,因此您很可能需要为 basicHttpBinding 配置新服务。这将为您提供 ASMX 客户端所需的互操作性。

3) 如果 WCF 服务创建的soap 结构与您当前的soap 匹配,则不应该。

我依稀记得 WSE 3.0 支持一些 WS-* 标准。如果您当前的代码依赖于这些,那么您也可以为这些操作公开 wsHttpBinding,但我认为默认的 ASMX 客户端不能与 wsHttpBinding 配置的服务一起使用。

于 2011-03-18T15:33:31.293 回答
2

这取决于您需要对生成的 SOAP 消息进行控制。DataContract 定义了由操作定义的元素包裹的消息体的一部分。MessageContract 定义了整个消息的结构 - 您可以使用多个主体成员,您不必使用默认包装器元素,您还可以将一些数据放入 SOAP 标头中。

在您的方案中,最重要的部分是定义 WCF 以使用与以前的 WSE3 服务相同的 SOAP 消息。这里重要的是您当前如何序列化数据?如果您使用 Xml 序列化(和属性),您可以通过从数据协定序列化切换到 xml 序列化直接在 WCF 中使用它。

顺便提一句。为什么你使用 WSE3 而不是普通的 ASMX?您是否使用了消息安全性?在这种情况下,您将需要另一个绑定。BasicHttpBinding 不能做消息安全。

一般答案是肯定的,您可以创建当前客户端代理能够使用的服务。但实际上,工作量取决于您当前的服务和当前代码。

于 2011-03-18T15:23:01.027 回答