WCF中如何选择消息契约和数据契约?

发布于 2024-10-24 01:56:21 字数 429 浏览 1 评论 0原文

我阅读了很多东西来了解 WCF 中的各种内容。

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

在转换这些类时,我应该使用数据契约/数据成员属性还是 MessageContract 属性?

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

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

I am reading so many things to understand various things in WCF.

Very soon, actually, i want to move/convert existing WSE3 web services to WCF. In existing WSE web services, I have some (data) classes that model entities in our environment.

While transforming those classes, should I use Data Contract/Data Member attribute or the MessageContract attribute?

1. How to decide between Message Contract and Data Contract in WCF?
2. Does type of binding (like basicHttpBinding) has any role in this decision?
3. Does proxies created at client side (when we add web reference) change significantly depending on the Data or Message Contract?

(PS: I am trying to find a way so that existing WSE clients should be able to consume the WCF service without much alterations/modifications. Is it possible to use the current proxies generated from ASMX web services, to connect to the new WCF service just by setting URL of the proxy to WCF service?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遮云壑 2024-10-31 01:56:21

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

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

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

3) 如果 WCF 服务创建的肥皂结构与您当前的肥皂相匹配,则不应出现这种情况。

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

Here is a quick go at answering your questions:

1) Unless there is a specific reason like tweaking the structure of the soap XML, use DataContract instead of MessageContract.

2 & PS) Since you are currently using soap over HTTP, you'll most likely need the new services to be configured for basicHttpBinding. This will provide the interoperability that you need for the ASMX clients.

3) It shouldn't if the soap structure created by the WCF service matches your current soap.

I vaguely remember that WSE 3.0 supported some of the WS-* standards. If your current code depends on these then you may be able to also expose a wsHttpBinding for these operations but I don't think a default ASMX client works with a wsHttpBinding configured service.

2024-10-31 01:56:21

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

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

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

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

It depends on control you need over resulting SOAP message. DataContract defines part of message body wrapped by element defined by operation. MessageContract defines a structure of whole message - you can use multiple body members, you don't have to use default wrapper element and you can also place some data into SOAP headers.

In your scenario the most important part is to define WCF to use same SOAP messages as your former WSE3 service. Here the important is how do you currently serialize data? If you use Xml serialization (and attributes) you can use it directly in WCF by switchinig from data contract serialization to xml serialization.

Btw. why did you use WSE3 instead of plain ASMX? Did you use message security? In such case you will need another binding. BasicHttpBinding is not able to do message security.

General answer is yes, you can create service wich your current client proxies will be able to consume. But in reality the effort depends on your current service and current code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文