gpt4 book ai didi

wcf - 设计 WCF 数据契约和操作

转载 作者:行者123 更新时间:2023-12-04 18:44:17 25 4
gpt4 key购买 nike

我开始设计一个 wcf 服务总线,它现在很小,但会随着我们业务的增长而增长,所以我担心一些日益严重的问题,并尽量不要过多地使用 YAGNI。这是一个电子商务平台。问题是我对把东西放在哪里有太多的第二个想法。我将给出一个场景来演示我所有的问题。

We have an e-commerce website that sells products and ultimately deliveries them. For this we have a PlaceOrder service which, among other parameters, expects an Address object that in this context (our website placing an order) is made of City, Street and ZipCode.

We also do business with partners that use our platform only to sell products. They take care of the delivery. For this scenario we have a PlaceOrderForPartner service that, among other objects, expects an Address object. However, in this context (partner placing an order) the Address object is made of different information that is relevant only to a order placed by partner.



鉴于这种情况,我有几个问题:

1) 如何在我的解决方案的命名空间和文件夹中组织这个 DataContracts 对象?我想过为每个上下文(合作伙伴、客户等)创建一个文件夹来保存服务和 DataContracts。

所以我会

- 我的解决方案.sln
- 合作伙伴(文件夹)
- PartnetService.svc
- 数据契约(Contract)(文件夹)
- 地址
- 客户(文件夹)
- 客户.svc
- 数据契约(Contract)(文件夹)
- 地址

使用这种方式,我将有一个命名空间来放置我所有的上下文特定的数据契约。

2)服务设计呢?我是否应该为每个可能放置和订购的服务创建一个服务,并在其中创建一个 PlaceOrder 方法,如下所示:

Partner.svc/PlaceOrder
客户.svc/PlaceOrder

或者使用 PlaceOrderForPartner 和 PlaceInternalOrder 创建一个 Order 服务,如下所示:

Order.svc/PlaceOrderForPartner
Order.svc/PlaceOrderForCustomer

3) 假设我在最后一个问题中选择了第一个选项,我应该如何处理对订单进行的合作伙伴和客户共有的操作?

4) 我应该将 DataContracts 和 Service 定义放在同一个程序集中吗?每人一份?服务实现的一切?

5) 如何命名操作的输入和输出消息?我应该使用实体本身还是使用 OperationNameRequest 和 OperationNameResponse 模板?

最重要的是,我的好问题是:如何“组织”服务创建中涉及的数据契约(Contract)和服务?

在此先感谢您对此的任何想法!

最佳答案

除了 TomTom 提到的,我还想在这里添加我的 2 美分:

我喜欢像这样构建我的 WCF 解决方案:

契约(Contract) (类库)
包含所有服务、操作、故障和数据契约。可以在纯 .NET-to-.NET 场景中在服务器和客户端之间共享

服务实现 (类库)
包含实现服务的代码,以及实现此目的所需的任何支持/帮助方法。没有其他的。

服务主机 (可选 - 可以是 Winforms、控制台应用程序、NT 服务)
包含用于调试/测试或可能也用于生产的服务主机。

这基本上给了我服务器端的东西。

在客户端:

客户端代理 (类库)
我喜欢将我的客户端代理打包到一个单独的类库中,以便它们可以被多个实际的客户端应用程序重用。这可以通过使用 svcutil 或“添加服务引用”并手动调整产生的可怕的 app.config 来完成,或者通过使用 ClientBase<T> 手动实现客户端代理(共享契约(Contract)程序集时)。或 ChannelFactory<T>结构体。

1-n个实际客户 (任何类型的应用程序)
通常只会引用客户端代理程序集,或者契约(Contract)程序集,如果它被共享的话。这可以是 ASP.NET、WPF、Winforms、控制台应用程序、其他服务 - 随便你说。

那样;我有一个漂亮干净的布局,我一遍又一遍地使用它,我真的认为这让我的代码更干净,更容易维护。

这受到 Miguel Castro 的 Extreme WCF screen cast 的启发在 DotNet Rocks 电视上与卡尔富兰克林 - 强烈推荐的屏幕 Actor !

关于wcf - 设计 WCF 数据契约和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2401809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com