设计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数据契约和操作 的相关文章

  • WCF - AsyncPattern=true 或 IsOneWay=true

    我的 WCF 服务中很少有方法需要花费大量时间 生成报告和发送电子邮件 根据目前的要求 要求客户端应用程序只需提交请求 然后不等待整个过程完成 它将允许用户继续在客户端应用程序中执行其他操作 而不是等待整个过程完成 我很困惑该走哪条路 As
  • 使用 ELMAH 记录 WCF 服务的异常

    我们正在使用优秀的ELMAH http code google com p elmah处理 ASP NET 3 5 Web 应用程序中未处理的异常 这对于除使用 REST 功能使用的 WCF 服务之外的所有站点都非常有效 当操作方法中发生应
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 通过代理服务器连接到 WCF 服务时出现奇怪的异常

    例外 相对 URI 不支持此操作 发生在以下情况 我有一个 WCF 服务 ServiceContract ProtectionLevel ProtectionLevel None public interface IMyService Op
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • Symfony2 - 将 Swiftmailer 添加为服务

    我想将我的电子邮件代码从我的控制器移至服务中 到目前为止我已完成以下操作 在 services yml 中创建条目 在 acme demobundle services EmailManager php 中创建了一个 EmailManage
  • 如何保证单向方法的可靠性?

    The 关于单向调用 回调和事件您需要了解的信息 http msdn microsoft com en us magazine cc163537 aspx文章讲述 客户端不关心调用结果的事实并不意味着客户端根本不关心调用是否发生 一般来说
  • rabbitmq 的 REST API

    有没有办法从 ajax 向 RabbitMQ 发送数据 我的应用程序由数千个 Web 客户端 用 js 编写 和 WCF REST 服务组成 现在我试图弄清楚如何为我的应用程序创建可扩展点 这个想法是有一个rabbitmq实例 它从放置在一
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • 使用 SOAP 调用 WCF 服务

    我正在尝试在不创建 WCF 客户端的情况下测试 WCF 服务 我有类似的代码 问题here https stackoverflow com a 1643025 1397017 我希望完全控制 SOAP 负载 因此我希望能够发出我自己的 We
  • 堆内存问题

    有一个 WCF 自托管服务必须在 99 的时间内正常工作 有时我们会遇到这样的记忆问题 但问题发生后 服务一切正常 我们该如何处理这个问题 任何关于提供能够在不同情况下生存的强大服务的提示和要点都非常受欢迎 我不太确定问题出在哪里 但内存泄
  • WCF 客户端返回空数组 - XML 响应似乎正常

    我正在尝试为我们的 Intranet 上托管的 Web 服务创建一个简单的 WCF 客户端 C 使用 Fiddler 和 SoapUI 我可以看到请求和响应似乎正常 但是当我运行代码时返回一个空数组 我会尝试只粘贴相关的行 但会是很多东西
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • 在 WCF 中通过 net.pipe 运行多个服务

    我正在构建一个分布式应用程序 需要 6 种不同的服务 我必须使用 Visual Studio 2008 在我的 XP 笔记本电脑上演示该应用程序 是否可以同时在 localhost 上运行多个服务 所有服务都使用 net pipe 例如 n
  • 从 OperationContext 获取 SOAP 标头中的值

    我有以下代码C 寻找一个apiKey在下面的SOAP header SOAP 标头
  • 如何在 IIS 中将 WCF 与 basichttpbinding only、SSL 和基本身份验证结合使用?

    是否可以仅使用 IIS 中的 SSL 和基本身份验证来设置 WCF 服务BasicHttpBinding binding 我无法使用wsHttpBinding binding 该站点托管在 IIS 7 上 并设置了以下身份验证 匿名访问 O
  • 如何在2.0构建的应用程序中使用WCF wsHttpBinding服务?

    WCF 服务正在使用 wsHttpBinding 绑定运行 将使用 WCF 服务的应用程序不符合 WCF 或者换句话说 它位于 Framework 2 0 之上 我无法在此应用程序中使用 ServiceModel 因为只有 3 5 支持 S
  • 如何从互联网访问本地网络内的服务器

    假设我有一个服务器应用程序在未直接连接到互联网但通过路由器连接的计算机上工作 所以问题是如何从不在内部网络 从互联网 内的另一台计算机连接到该服务器 据我所知 管理员可以配置路由器将指定端口请求重定向到该计算机 但我可以自动执行此操作吗 我
  • WCF、REST、SSL、客户端、自定义证书验证

    我有一个无法解决的具体问题 让我详细解释一下 我是这项技术的新手 所以我可能使用了一些错误的术语 如有不明白之处 请指正并解释或要求解释 我正在创建一个自托管的 WCF REST 服务器 托管在 WPF 应用程序中 它使用 https SL

随机推荐

  • 求圆上任意弧的长度

    我有一个有趣的 无论如何对我来说 问题 我正在 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 太多 这是一个电子商务平台 问题是我对把东西放在哪里犹豫了太多 我将给出一个场景来展示我所有的问题 我们有一个