将多个类切换到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")
}))
{
这就是我的问题所在。第一个参数是一个类(不能是接口或抽象类)。我必须为每个扩展接口的类都这样做吗?或者我可以以某种方式为多个类使用同一主机吗?
假设您有以下服务接口:
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配置和确保处理客户端之外)。