设计WCF数据契约和操作

2024-02-10

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

我们有一个电子商务网站,可以销售产品并最终交付产品。为此,我们有一个 PlaceOrder 服务,除其他参数外,它还需要一个由城市、街道和邮政编码组成的地址对象(我们的网站下订单)。

我们还与仅使用我们的平台销售产品的合作伙伴开展业务。他们负责送货。对于此场景,我们有一个 PlaceOrderForPartner 服务,除其他对象外,它还需要一个 Address 对象。但是,在这种情况下(合作伙伴下订单),Address 对象由仅与合作伙伴下的订单相关的不同信息组成。

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

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

所以我会



- MySolution.sln
-    Partner (folder)
-        PartnetService.svc
-    DataContracts (folder)
-        Address
-    Customer (folder)
-        Customer.svc
-    DataContracts (folder)
-        Address
  

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

2)服务设计怎么样?我是否应该为每个可能下订单的服务创建一项服务,并在其中创建一个 PlaceOrder 方法,如下所示:

Partner.svc/PlaceOrder
客户.svc/PlaceOrder

或者使用 PlaceOrderForPartner 和 PlaceInternalOrder 创建订单服务,如下所示:

Order.svc/PlaceOrderForPartner
Order.svc/PlaceOrderForCustomer

3)假设我在上一个问题中选择了第一个选项,那么对于合作伙伴和客户共同的订单操作,我该怎么办?

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

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

我的主要问题是:如何“组织”服务创建中涉及的数据契约和服务?

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


除了 TomTom 提到的之外,我还想在这里补充我的 2 美分:

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

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

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

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

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

在客户端:

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

1-n个实际客户(任何类型的应用程序)
通常只会引用客户端代理程序集,或者也可能引用合约程序集(如果正在共享)。这可以是 ASP.NET、WPF、Winforms、控制台应用程序、其他服务 - 只要你能想到的。

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

这是受到米格尔·卡斯特罗 (Miguel Castro) 的启发极端 WCF 截屏 http://www.dnrtv.com/default.aspx?showNum=122在 DotNet Rocks TV 上与卡尔·富兰克林 (Carl Franklin) 一起表演 - 强烈推荐屏幕演员!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计WCF数据契约和操作 的相关文章

随机推荐

  • 求圆上任意弧的长度

    我有一个有趣的 无论如何对我来说 问题 我正在 OpenServo org for V4 上工作 我正在尝试确定行进弧的长度及其方向 我有一个磁性编码器 可以返回从 0 到 4095 的轴位置 伺服系统有两个逻辑终点 称为 MAX 和 MI
  • 如何使用 JPA 和 Hibernate 映射组合键?

    在此代码中 如何为组合键生成 Java 类 how to composite key in hibernate create table Time levelStation int 15 not null src varchar 100 n
  • pthread_cond_timedwait 立即返回

    我有一个奇怪的问题 我有以下代码 dbg condwait timeout d d n abs timeout gt tv sec abs timeout gt tv nsec ret pthread cond timedwait q gt
  • Spring JavaMailSenderImpl:在哪里设置字符集?

    如果您使用 Spring JavaMailSenderImpl 您在哪里定义发送邮件所用的字符集 我们将 Spring JavaMailSenderImpl 与从 Websphere Application Server 6 1 获得的邮件
  • java中的时间同步

    在 for 循环中 我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器 SUMO 为了确保我的程序 实时 模拟 1 个模拟步骤 1 秒 我想在处理阶段之后让我的程序休眠 直到下一个时间步骤开始 为了获得更好的结果 我根据最初采用的参考时
  • ActionBar 中的 ProgressBar,例如具有刷新功能的 GMail 应用程序

    我想做与 Honeycomb 平板电脑上的 GMail 应用程序相同的事情 单击 刷新 按钮时 该图标将替换为进度条 我怎样才能做到这一点 Thanks 好吧 我尝试了 Cailean 的建议 但它对我不起作用 每次我想将不确定的进度恢复到
  • DOM 更新后的大循环无法及时渲染

    我的页面中有大约 9000 个元素 必须经常重建 这可能需要几秒钟的时间 所以 我制作了一个小的覆盖小部件 用一个覆盖元素Loading 信息 在我重建元素之前 我调用showOverlay 在循环之后我调用hideOverlay 但是循环
  • 如何停止 JShell / Kulla 中的无限循环?

    JShell 是一个 Java REPL 计划与 Java 9 一起发布 但是 它有一个公开测试版 如果我通过键入以下内容在 JShell Kulla 项目 中创建无限循环 gt while true JShell 将永远循环 除了完全退出
  • 在 nextjs 13 上加载页面

    您好 我正在尝试在网站需要时间加载时显示加载页面 因为它是一个相当大的网站 我认为加载屏幕会提供最好的用户体验 但是我似乎无法弄清楚如何让它在 nextjs 13 上工作 我创建了一个简单的功能组件 上面写着加载 并且有将其直接导入到我的l
  • d3.js 超出最大调用堆栈大小错误

    当我尝试布局力导向图时 以下是我收到的错误 我在 Mike Bostock 的 github 页面上读到了这个问题 发现这可能是由于坐标的 NaN 值或在同一点绘制的所有点造成的 我检查了控制台 发现所有点都以相同的 X 和 Y 值绘制 在
  • 根据长度对集合 进行排序

    我的问题与this https stackoverflow com questions 3844721 algorithm to generate all permutation by selecting some or all chara
  • 数据框从宽到长,具有多个变量和 ID R [重复]

    这个问题在这里已经有答案了 我有一个数据框 其中包含参与者对两个文本的判断 假设每个文本都有正确答案和标识符 并且每个文本都被判断多次 set seed 123 wide df data frame participant id LETTE
  • sklearn.* 模块在 0.22 版本中已弃用,并将在 0.24 版本中删除

    我正在将一个软件从 Python 2 7 迁移到 Python 3 出现的一个问题是 sklearn neighbors kde 模块在版本 0 22 中已弃用 并且 将在 0 24 版本中删除 对应的类 函数 应该从 sklearn ne
  • 将计算的 xpage 字段绑定到表单字段

    关于将数据绑定到表单存在很多问题 这很简单 我有一个表单 它使用多个计算字段 这些字段使用 DbLookup 提取数据 以根据用户选择的下拉菜单填充字段 问题是 没有一个计算字段将任何值保存到它所绑定的形式中 表单上保存的唯一数据是手动选择
  • 春季云配置搜索路径

    我正在考虑通过 Spring Cloud Config 实现 12factor 方法来外部化配置 但无法按照我的预期使用 searchPaths 使通配符正常工作 文档http cloud spring io spring cloud co
  • SQL中检查字段是否包含特殊字符

    我们决定使用Nvarchar在某些表中存储一些信息 原因是我们假设我们将有很多特殊字符 因为数据库包含法语和德语数据 提取一些数据后 我们估计完整运行的大小非常巨大 20 TB 现在我们想检查每个表以查找是否找到特殊字符 如果没有 那么我们
  • add_custom_command -- 在重建时更新依赖项列表

    查看上次状态更新 初始条件 代码生成器 生成一组 C 源代码 以一个输入文件作为参数 输入文件可能包含其他输入文件 已经解决了获取输出文件列表 解析输入代码生成文件以获取代码生成输入的完整列表的任务 IE 首次为 add custom co
  • 防止 IIS 通过 ASP.NET 管道提供静态文件

    对我的 css js 图像文件的请求是通过 ASP NET 管道提供的 我认为 IIS 默认情况下会避免这种情况 但我在我的网站上看到了这些请求Application AuthenticateRequest断点 并且不需要实际验证这些请求
  • 在AWS Lambda执行环境上安装第3方库

    我需要为 AWS Lambda 函数安装本机库 使用 RPM 我已经发现这篇博文 https aws amazon com blogs compute nodejs packages in lambda 本机模块部分 但我不知道在哪里编写这
  • 设计WCF数据契约和操作

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