将多个类切换到WCF

本文关键字:WCF | 更新日期: 2023-09-27 18:21:12

我有一个接口和多个使用该接口的类,而且在服务器上有一个工厂,它根据一些参数创建一个特定的实例。

现在我必须将这些类公开给WCF客户端,我希望能够将接口标记为OperationContract并建立通信,但在服务器上(我是WCF的新手),我必须为每个类创建一个服务(或至少打开一个端口),而我不能为接口这样做。

这是唯一的方法吗?还是我错过了什么?

编辑以澄清:
假设我有一个带有一个方法的接口,我们称之为Execute(EnumedParam action)。我希望能够从的客户那里调用它

InterfaceType.Execute(Action.One);

并在服务器上基于动作创建实例并执行其CCD_ 3方法。

此外,该类可能有许多实例,我希望客户端不了解任何关于类的信息,只了解接口。

我如何通过WCF做到这一点?

(注意:如果我的课堂模式完全错误,你能推荐一本书或一个博客让我读更多关于这方面的内容吗?)

我无法在注释中粘贴代码以进行另一次编辑

Wouter de Kort举了一个很好的例子来说明我在做什么。但是我该如何设置端点呢?看看这里给出的例子http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication-作者这样打开端口:

using (ServiceHost host = new ServiceHost(
  typeof(StringReverser),
  new Uri[]{
    new Uri("http://localhost:8000"),
    new Uri("net.pipe://localhost")
  }))
{

这就是我的问题所在。第一个参数是一个类(不能是接口或抽象类)。我必须为每个扩展接口的类都这样做吗?或者我可以以某种方式为多个类使用同一主机吗?

将多个类切换到WCF

假设您有以下服务接口:

public interface IMyService 
{
    void Execute(EnumdParam action);
}

如果你想在WCF中使用这个,你会装饰它:

[ServiceContract]
public interface IMyService 
{
   [OperationContract]
   void Execute(EnumdParam action);
}

在客户端上,您必须创建一个代理来访问WCF服务。

[System.Diagnostics.DebuggerStepThroughAttribute()]
public partial class MyServiceClient : ClientBase<IMyService>, IMyService
{
    public MyServiceClient ()
    {
    }
    public void Execute(EnumdParam action);
    {
        return base.Channel.Execute(action);
    }
}

正如您所看到的,您的客户端代理实现了IMyService,因此在您的客户端代码中,您只需要知道IMyService接口。如果您将工厂更改为返回MyServiceClient而不是MyService,则客户端代码中的任何内容都不必更改(除了WCF配置和确保处理客户端之外)。

相关文章:
  • 没有找到相关文章