扩展WCF服务及其自动生成的客户端服务引用

时间:2010-09-14 16:07:20

标签: c# .net wcf wcf-client

我对.Net和C#开发相对较新,并且遇到了将WCF服务从应用程序拆分为我正在创建的网络DLL的问题。 DLL的目标是提供一种从服务器和客户端应用程序托管和访问服务的简单方法,并向心跳和自动重新连接的基本服务添加一些功能,而不必每个应用程序都必须指定心跳方法在他们的WCF服务和witho / ut中,应用程序管理自动重新连接的计时器。

DLL提供了具有以下目标的ServiceServer和ServiceClient类:

ServiceServer

  • 创建并管理ServiceHost实例。
  • 从DLL外部托管服务(作为通用传递)。
  • 将心跳操作添加到要托管的服务,以及我们所有客户端/服务器应用程序通用的其他操作。

ServiceClient

  • 创建客户端应用程序并使客户端服务引用可用。服务引用(自动生成)也作为应用程序的通用传递。
  • 将心跳方法添加到客户端的服务引用中,以及我们所有客户端/服务器应用程序通用的其他操作。
  • 使用计时器或类似设备自动重新连接。

到目前为止,我尝试使用部分类,泛型和静态扩展方法但没有成功。问题是,为了使我的DLL完全解耦,我使用泛型获取并创建服务引用和服务; 我无法使用任何这些方法扩展收到的泛型类型

我基本上尝试使用其他方法扩展客户端服务引用,以便能够发送心跳,而不需要另外的独立连接和服务(这会使心跳无效),并且客户端应用程序不必知道任何关于发送心跳和自动重新连接。同样,我想扩展服务器类接收的服务作为参数,以添加操作和服务器心跳代码的实现,并最终实现其他常见的所有应用程序方法。

2 个答案:

答案 0 :(得分:3)

您可能希望探索此解决方案,以便在wcf服务中自动实现听力测试。

http://weblogs.asp.net/cibrax/archive/2010/05/17/enabling-service-availability-in-wcf-services.aspx

该解决方案还为客户端提供了扩展方法。

由于 巴勃罗。

答案 1 :(得分:0)

不,不会这样。

定义服务时,首先要创建一个或多个服务合同(最佳做法是使用接口)。必须使用ServiceContract属性标记服务合同接口,并且必须使用OperationContract属性标记服务中使用的每个公开方法。然后创建实现这些接口的服务类。此类可以作为WCF服务公开,并为每个接口(服务合同)提供端点。

没有其他方法可行。您不能添加扩展方法,使用泛型或其他任何“扩展”实现的服务。您可以继承现有服务类并添加其他接口。显然,除非您创建一些非常高级的代码以在运行时生成动态数据类型(=在运行时发出MSIL),否则这不是代码解决方案。