WCF 数据合约中可以包含 WCF 操作合约吗?为什么?

2024-05-05

我有一份数据合同,说是用户。它是可序列化的并且可以通过网络传输。我想要一个操作合约 SaveUser()。我可以将 SaveUser(User user) 作为操作合同保留在我的服务合同中。但我可以将其作为自己的行为保留在我的数据合约本身中吗?

理想情况下,Save() 应该保存自身。因此,根据面向对象原则,每个数据契约都应该知道如何保存自身,并且应该从外部世界抽象出细节。

这在 WCF 中可能吗?


我会说不,这是正确的。 虽然我同意您关于 OO 原则和封装的看法,但 WCF 处理的是 SO(面向服务)原则。 可以从 CD 播放器和 CD 的角度来考虑这一点。 CD 播放器就是服务。 CD 是数据合同。 OO 原则要求 CD 具有 Play 方法,以便能够自行播放。但是,播放 CD 不仅仅是了解其数据。有电子设备、输出插孔的接口等。这些都是由 CD 播放器...服务提供的。 这就是为什么您的服务合约具有 Play 方法,并接受 CD 作为数据合约,告诉它要播放什么(而不是如何播放)。

在评论中的问题后编辑:不,当然(希望)不是。最坏的情况是您将拥有 34 个服务合同,每个服务合同平均有 6 个方法。仅当您确定每个类上的每个方法都必须作为服务操作发生时,才会出现这种情况。您需要考虑两个方面。第 1 方面:您的服务设计。您应该将 34 个类分组为有意义的分组,而不是 34 个服务合同,并为每个组创建 1 个服务合同。例如,您最终可能会得到一个 InventoryManagement 服务、一个 SalesOrderProcessing 服务和一个 BackOfficeOperations 服务。这些服务中的每一个都包含与分组到其域中的类范围相关的服务操作(和数据契约)。 方面2:客户端发生了什么。我提到您必须考虑每个类的方法是否必须是 WCF 服务操作。当然有可能在客户端拥有丰富的完全封装的业务类。当它们的操作不需要作为服务操作执行时,这些操作在客户端域中执行它们的逻辑。问题变成了如何通过服务将它们发送到客户端,这里有两种选择:a) 在客户端上实例化一个实例,并从服务操作返回的 DataContract 填充它的属性。 b) 直接从服务操作返回对象,就像在 CSLA 这样的框架中所做的那样(我认为 DevForce 遵循类似的方法通过 WCF 服务返回业务类)。 华泰

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

WCF 数据合约中可以包含 WCF 操作合约吗?为什么? 的相关文章

  • WCF服务契约上的数据注释

    我有一个 WCF 服务 其中定义了一个 DataContract 类 每个属性都有 DataMember 属性 并且我已向其中几个属性添加了几个数据注释属性 Required 和 StringLength 然后 我在 ASP NET MVC
  • autofac wcf注册错误

    我正在尝试在 Wcf 上尝试使用 Autofac 进行结构 namespace WcfService1 Model DataContract IsReference true public partial class Account Dat
  • 在 RESTful WCF 中混合 XML 和 JSON,无需单独的方法

    我有一个 RESTful WCF 服务 可以返回 XML JSON 或 JSONP 具体取决于参数 例如 service svc stuff format xml or service svc stuff format json callb
  • 如何自动执行/安排 IIS 中托管的 WCF 服务调用?

    我有一个非常简单的服务合同 用于管理自己的数据导入 类似于 using System ServiceModel namespace Company Services Domain Contract ServiceContract Name
  • WCF 数据契约/序列化

    我创建了一个简单的 WCF 应用程序 它公开一个操作 此操作采用复合数据类型作为参数 我没有用 DataContract 属性修饰这个复合数据类型 但这是有效的 我可以在 WSDL 中看到它的架构 现在我的理解是 这个新的自定义类型应该用
  • 复制到其他计算机时无法在 WcfTestClient 中添加服务

    我想在另一台计算机上运行 WcfTestClient VS2012 中包含的一个 而不安装 VS2012 这可能吗 在我已经安装了 NET 4 5 的机器上 但是当我尝试添加 Web 服务时 它给了我以下堆栈跟踪 Exception Tex
  • WCF 每个端点有不同的身份验证方法

    我有 WCF 服务 我的服务有 2 个端点 每个端点都有不同的联系人 该服务使用自定义用户名身份验证 在 的 customUserNamePasswordValidatorType 属性中定义 问题是两个端点将使用相同的身份验证方法 无论如
  • 带有 WCF BadContextToken 的 PHP Soap 客户端

    经过几天的谷歌 in 尝试 脱发 我仍然找不到解决方案 所以请帮助 简短信息 我需要使用 PHP SOAP 客户端 的 WCF 服务 它使用 wsHttpBinding ws security 并且无法设置 basicHttpBinding
  • 如何使用 MVVM-Light 和 WCF RIA 服务创建可混合项目

    我想使用 MVVM 模式构建我的业务应用程序 我选择 MVVM Light 因为它符合我的需求 在我见过的有关 MVVM Light 的每个示例中 没有人使用 WCF RIA 经典的 MIX10 示例在同一项目中使用服务 而 WCF RIA
  • 如何添加重试以调用 Web 服务?

    我有一个应用程序调用使用 wsHttpBinding 的 Web 服务 我需要在连接超时等情况下对 Web 服务调用实现某种重试功能 执行此操作的最佳方法是什么 我已经阅读过有关 WS ReliableMessaging 的内容 但这不是
  • wsdl 文件中的 svcutil:找不到目标命名空间的错误架构

    在我的机器上 我有一个 WSDL 文件和所有必需的架构文件 我正在尝试使用 svcutil 从 WSDL 创建客户端代理代码 命令 svcutil myfile wsdl 我在使用 svcutil 时不断收到错误 但在使用soapUI 加载
  • WCF - 如何增加消息大小配额

    我有一个 WCF 服务 它将 1000 条记录从数据库返回给客户端 我有一个 ASP NET WCF 客户端 我在 asp net Web 应用程序项目中添加了服务引用来使用 WCF 当我运行客户端应用程序时 我收到以下消息 传入消息的最大
  • WCF:在 ServiceModel 客户端配置部分中找不到引用协定“IService”的默认端点元素。当托管在 IIS 中时

    我有一个 WCF 服务托管在 IIS 中 我还有一个 WCF 客户端 控制台应用程序 我用过svcutil构建代理类和配置文件 然后将它们添加到我的客户端项目中 它建造得很好 但是当我尝试运行该程序时 它抛出以下异常 在 ServiceMo
  • 测试项目和配置文件

    我的 Visual Studio 2008 解决方案中有这种设置 一个使用库 Lib1 需要 app config 文件中的一些配置条目 的 WCF 服务项目 WCFService 我有一个单元测试项目 MSTest 其中包含与 Lib1
  • 无法从 Windows 7 上的 Windows 服务启动桌面应用程序

    HI 我在 Windows 7 上有 C WCF Windows 服务 以具有管理员权限的用户身份登录 我正在尝试在服务启动后启动桌面应用程序 我发现的所有讨论都是关于 Windows 工作站和桌面 我创建了一个单独的线程 设置线程工作站和
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 可能有相同的合同,相同的绑定,相同的地址,但不同的端口?

    我有需要通过 basicHTTPBinding 进行通信的手持设备 我有合同 一切都按照广告进行 我需要扩展它以轻松支持测试环境 培训 当然还有生产的更改 我选择了端口路线 认为我可以公开具有端口差异的不同端点 并根据端口决定我想要来自哪个
  • 使用 ContractNamespace 属性设置 WCF DataContract 命名空间

    在设计我的服务时 我决定要自定义出现在生成的 WSDL 中的名称空间 对于数据合同 我遇到了合约命名空间 http msdn microsoft com en us library system runtime serialization
  • 自定义行为的配置错误

    我创建了一个与 WCF 服务一起使用的自定义行为 以将所有错误记录到应用程序日志中 我做了一个BehaviorExtensionElement对于行为 public ErrorLoggingBehaviorExtensionElement
  • 使用 json 向 RESTful WCF 发送 Post 请求

    我已经尝试了每种组合来发送请求 以从 jQuery 向 RESTful WCF 发送 POST 请求 有人可以模仿并使其发挥作用吗 代码在这里 http pastebin com Ua97919C http pastebin com Ua9

随机推荐

  • 当字段未触及时,角度反应形式返回空值

    在我的用例中 当用户单击编辑按钮时 Angular 会对后端进行 HTTP 调用并检索对象 然后在编辑表单上填充这些值 用户可以更新或保持字段不变 点击时update按钮 Angular 应该获取表单中存在的所有这些值并将它们发送到后端 因
  • 当单元格值和复选框更改时更改工作表

    我有一本包含多个工作表的工作簿 我有一个菜单页面 工作表 其中包含多个用户选择 输入新订单 更新订单等 每个选项旁边都有一个复选框 根据选中的复选框 单元格F4 F21改变自0 to 1并且 细胞B1更改我想要去的工作表的名称 我的主菜单工
  • 如何从 os_log() 查找源文件和行号

    The 记录 Apple 参考 https developer apple com reference os 1891852 logging对于 iOS 10 和 macOS Sierra 中的新日志记录系统 明确表示不要包含行号和源文件信
  • clickedButtonAtIndex 方法未被调用

    当用户点击按钮时UIAlertView the clickedButtonAtIndex应该调用方法 但是 它没有 in the h我已经打电话给UIAlertView协议 interface RechercherViewControlle
  • Laravel 5.4 上传原始文件名和扩展名

    通过表单提交文件时 如何将原始文件名 file jpg 上传到数据库 控制器 public function addCv Request request cv Cv create request gt all file request gt
  • log4net 未记录到数据库

    我有一个奇怪的问题 我的 log4net 设置没有将任何数据记录到数据库中 也没有引发任何异常来通知问题 我已经在一个名为 Log4net Config 的单独文件中定义了配置设置 并且 已经在程序集中引用了它 请注意 我通过 nuget
  • MYSQL中如何获取不带小数的列值

    我的 mysql 表中有两列A and B我正在获取这样的记录 select A B from table 但问题是上面的查询提供了类似这样的值 12 00 3 4 78 9 但我想得到这样的结果 12 3 78 我将使用哪个 MySQL
  • 如何解决 Python 'Pyzbar' 库的导入错误?

    我刚刚开始熟悉 Pyzbar 库 但是当使用decode方法我得到一个错误 这是代码 import cv2 import numpy as np import pyzbar code image cv2 imread C Users Ace
  • 如何在 Python 中使用 Selenium 运行无头 Chrome?

    我正在尝试使用 selenium 进行一些操作 我真的希望我的脚本能够快速运行 我认为使用无头 Chrome 运行我的脚本会使其速度更快 首先 这个假设是否正确 或者我是否使用无头驱动程序运行我的脚本并不重要 我希望无头 Chrome 能够
  • 保护 Spring 支持,当前端使用 adal auth 保护时

    所以我们的应用程序有两个部分 前端 ui 使用 Angular JS 后端 使用Spring boot的rest api 使用 microsoft adal angular6 库通过 Azure Active Directory 进行身份验
  • 使无头浏览器停止加载页面

    我正在使用 watir webdriver ruby gem 它启动浏览器 Chrome 并开始加载页面 页面加载速度太慢 watir webdriver 引发超时错误 如何让浏览器停止加载页面 require watir webdrive
  • 如何在 AWS CDK 堆栈中压缩 Node Lambda 依赖项?

    我正在使用 CDK 通过 API Gateway Lambda 和 DynamoDB 创建一个简单的无服务器项目 到目前为止看起来很酷 但是当我向 Lambda 添加外部依赖项时出现以下错误 Runtime ImportModuleErro
  • 为什么我的 Silverlight 4 浏览器外应用程序只显示白色?

    My 银光应用作品fine当运行在browser 但是当我将其安装为浏览器外应用程序中 窗口框架会出现适当的图标和标题 但窗口的内容是只是白色 它是在开始菜单但当我关闭它并再次打开时 它仍然是空白的 我在上复制了这个Windows 7的 a
  • 更新 PartialView mvc 4

    哎呀 如何使用模型中的数据刷新部分视图 第一次 当页面加载时它可以正常工作 但当我从操作中调用它时却不能正常工作 我创建的结构如下所示 在我看来任何地方 Html RenderAction UpdatePoints 我的部分观点 更新点 h
  • 添加和提交文件后Git推送不起作用

    I m new to Github and Git tried to use gitbash on Windows After adding and committing files If I add the git push cmd Th
  • 使用 Firebase 验证用户手机号码的正确方法

    我知道我可以使用Firebase s电话验证开启Android and iOS 但问题是有关客户端验证的信息很容易在客户端被伪造 因为我只使用服务器端SSL证书 所以 只有客户端知道服务器是可信的 因此 我决定在服务器端发送手机号码并在那里
  • (不?)使用 JavaScriptSerializer 将 xml 文件(未知模式)转换为 c# 中的 json

    JavascriptSerializer 是将 xml 文件 未知模式 转换为 json 字符串的 工具 吗 这里有一些线程讨论如何在 C 中将 xml 转换为 json 以及一些推荐的专用解决方案 http www phdcc com x
  • 从 CMSampleBuffer 播放音频

    我在 iOS 中为群组创建了一个视频聊天应用程序 我一直在寻找一些方法来分别控制不同参与者的音频音量 我找到了使用静音和取消静音的方法isPlaybackEnabled in RemoteAudioTrack 但不控制音量 我还想我们是否可
  • 使用 Node.JS 客户端库插入 Google Analytics 内容实验

    我正在尝试使用 Node js 客户端库配置内容实验 但无法计算出语法 我应该将主体 实验资源 放置在哪里 如此处所述 https developers google com analytics devguides config mgmt
  • WCF 数据合约中可以包含 WCF 操作合约吗?为什么?

    我有一份数据合同 说是用户 它是可序列化的并且可以通过网络传输 我想要一个操作合约 SaveUser 我可以将 SaveUser User user 作为操作合同保留在我的服务合同中 但我可以将其作为自己的行为保留在我的数据合约本身中吗 理