WCF服务继承

2024-02-03

我有一个非常复杂的服务主机,其中包含多个 DUPLEX 服务。它们提供了一些常见的功能(连接、断开、保持活动等),但除此之外,它们还各自提供了非常具体的功能。

我的所有服务都继承自一个公共基类(抽象)。

因此,我还负责客户端应用程序的一部分,我希望在基类中处理连接、断开连接、保持活动 ping 和重新连接(等...)的行政官僚处理,以便我可以观察 DRY原则并强制其他开发人员不要实现他们自己的连接处理。

有没有办法让 WCF 公开服务基类,以便我可以为客户端应用程序中浪费时间的官僚行为创建一个通用包装类?

我真的不想看到未来客户端组件的每个开发人员都创建自己的包装器?

而且,如果你允许咆哮:

为什么、为什么、为什么微软如此完全忽视干净代码开发的最佳实践和基本原则?这与 INotifyPropertyChanged 相同 - 人们被迫编写大量不必要的重复代码,而不是提供一个简单的属性来通知属性......


我不知道有什么好方法可以让多个 WCF 代理继承一个公共基类。您可以手动编辑添加服务引用时生成的代码,但这不利于可维护性。

但是,如果您在客户端和服务器之间共享合同程序集,则可以让多个代理使用相同的基本接口。然后,您可以编写一个客户端帮助程序类(可能使用扩展方法)来在基本接口上执行常见操作。您也可以将帮助程序类放入共享程序集中,并从多个客户端重用它。

不过,我还没有使用过双工绑定,所以我不确定这是否会带来复杂性。

例如,假设您有两个服务 Calculator 和 Echo,并且每个服务都需要实现一个 Keepalive 方法。您可以定义三个服务契约接口:

[ServiceContract]
public interface IStatefulService
{ 
    [OperationContract]
    void KeepAlive(int sessionID);
}

[ServiceContract]
public interface ICalculator : IStatefulService
{
    [OperationContract]
    int Add(int a, int b);
}

[ServiceContract]
public interface IEcho : IStatefulService
{
    [OperationContract]
    string Echo(string message);
}

您可以将服务契约接口放在客户端和服务器共享的公共类库中。

在服务器上,您将拥有 ServiceBase 类,它将实现 IStatefulService 并包含 keepalive 处理代码。您将拥有一个具体的 CalculatorService,它派生自 ServiceBase 并实现 ICalculator;以及一个具体的 EchoService,它派生自 ServiceBase 并实现 IEcho。

在客户端,您需要两个代理,每个服务一个。理论上,您可以使用“添加服务引用”和“重用引用程序集的类型”复选框来生成代理 - 但我遇到了这方面的问题。相反,您可以直接使用 ChannelFactory,如下所示:

var echoer = (new ChannelFactory<IEcho>("")).CreateChannel();
Console.WriteLine(echoer.Echo("hello"));

var calculator = (new ChannelFactory<ICalculator>("")).CreateChannel();
Console.WriteLine(calculator.Add(2, 3));

(在生产代码中,您希望重用通道工厂,而不是像这样动态创建它们。并且您将处置代理,并且您将进行错误处理......)

您还需要在客户端配置文件中设置端点。

一旦您的两个代理共享一个基本接口,您就可以编写一个实用程序类来帮助您使用该接口。

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

WCF服务继承 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 为什么 set_symmetry_difference 无法与比较器一起使用?

    Example program include
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • PyCharm:为什么只显示退出代码行?

    例如 运行以下代码行 print Hello world My name is Enkouyami 只输出这个 Process finished with exit code 0 让它显示该文本的唯一方法是转到 python 控制台 我的
  • 在 Ubuntu 18.x 和 R 3.4.4/3.5.1 上安装 tidyverse

    我尝试安装 tidyverse 以及组成 tidyverse 的软件包 并得到以下输出 gt install packages tidyverse dependencies TRUE type source Installing packa
  • 在PHP应用程序中以安全的方式存储MYSQL的密码

    我有一个从代码连接到数据库的 php 应用程序 我想知道存储这些凭据的安全方法是什么 这是一个Linux服务器 编辑 我只想听到一些知情的意见 以便自己获得知情的意见 以便与我的团队讨论 我反对加密任何密码 但我的团队并不相信 我认为如果密
  • 使用 Autofac 进行 XUnit 测试构造函数依赖注入

    我正在使用 Autofac 实现 Xunit 我可以通过以下代码使其工作 using var scoped DbFixture Container Resolve
  • 使用批处理脚本在 Windows 中添加注册表项,并在数据中添加所需的引号

    小威利斯在这里 我正在尝试使用批处理脚本来编辑双击 jar 文件时使用的现有注册表项 问题是我尝试输入的数据包含引号 但我还需要引号才能将其视为字符串 Example reg add HKEY LOCAL MACHINE Software
  • 带有 ng-repeat 指令的容器高度为零

    我有一个带有 ng repeat 指令的 div 它会遍历一个数组并向我的容器添加一堆 div 当我打电话时 height 在现在充满 div 的容器上 它返回 0 它似乎返回 ng repeat 指令执行之前的高度 将 ng repeat
  • 如何翻转单个UIView(不翻转父视图)

    这是一个 iPad 项目 其中我有一个带有多个子视图的 UIView 我正在尝试使用 UIView transitionFromView toView duration options completion 为其中一个 UIView 制作动
  • C 和 C++ 风格文件 IO 之间的性能差异

    我一直听说 C 文件 I O 操作比 C 风格的 I O 慢得多 但我没有找到任何实际参考来说明它们实际上有多慢 所以我决定在我的机器上测试它 Ubuntu 12 04 GCC 4 6 3 ext4分区格式 首先 我在磁盘中写入了约 900
  • ActiveRecords 数组转为 JSON

    我知道 ActiveRecord 提供了一个 to json 方法 该方法允许使用 only 和 except 从 JSON 输出中过滤出字段 目前我正在使用以下命令将 find 中的数组格式化为 JSON customers Custom
  • VSCode 扩展从开发中运行,但在使用 webpack 打包时不起作用

    我已经构建 运行 打包并发布了一个扩展 但打包程序抱怨有 2509 个文件 4 28MB 并建议使用打包程序 我已按照以下说明进行操作捆绑扩展 https code visualstudio com api working with ext
  • UI 自动化和 WPF 的经验 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正在开发一个相当大的基于 WPF 的应用程序 并希望在我们的测试套件中包含一些自动化 UI 测试 其中已经包含许多单元测试 The 用户界面
  • 如何不使用 .data() 跳过第一个元素

    The data数组恰好包含 5 个对象 以下代码仅显示最后 4 个 并跳过第一个 d3 csv csv data function error data var table d3 select div var tr table selec
  • 如何使用 JSON 格式的日期过滤数据

    我想使用日期进行过滤 但数据是 JSON 格式 如何在 JavaScript 中使用日期过滤大型数据集 Example data date 22 12 2014 name selva date 10 10 2010 name raja da
  • CakePHP 时间助手问题

    我想我可能在这里犯了一个错误 当尝试在控制器的时间助手中使用简单函数时 出现以下错误 在视图中使用相同的函数调用时 我没有收到错误 以下是来自控制器的错误 接下来是失败的控制器代码 接下来是正在运行的视图代码 任何帮助表示赞赏 Error
  • 在 flutter v2.5 中迁移强调色

    在 flutter 2 5 更新后 我的主题数据有点损坏并且不再接受accentColor 我查看了文档 发现它被 重命名 为 colorScheme secondary 但无论我如何尝试 我都无法让它为我工作 这是我当前的代码 class
  • 使用正则表达式仅从列表中提取不包含重复字母的单词

    我有一个很大的单词列表文件 每行一个单词 我想过滤掉重复字母的单词 INPUT abducts abe abeam abel abele OUTPUT abducts abe abel 我想使用正则表达式 grep 或 perl 或 pyt
  • 将 RRULE 解析为可读文本?

    我正在寻找一个库 php 或一些伪代码来将 Ical RRULE 解析为可读文本 例如谷歌日历 RRULE FREQ MONTHLY INTERVAL 1 BYDAY 1FR 3FR 5FR gt Monthly on Friday of
  • 如何处理 C++ 接口中的单元

    我目前正在设计一个 API 我希望用户能够编写如下代码 PowerMeter forceVoltage 1 mV PowerMeter settlingTime 1 ms 目前我们使用如下定义来做到这一点 define mV 1 0e 03
  • 如何向 Django 管理中的字段添加可点击链接?

    我有这个 admin py class LawyerAdmin admin ModelAdmin fieldsets Name fields last first firm name firm url school year graduat
  • WCF服务继承

    我有一个非常复杂的服务主机 其中包含多个 DUPLEX 服务 它们提供了一些常见的功能 连接 断开 保持活动等 但除此之外 它们还各自提供了非常具体的功能 我的所有服务都继承自一个公共基类 抽象 因此 我还负责客户端应用程序的一部分 我希望