.net WCF客户机/服务器模型
我希望使用客户机/服务器模型创建一个功能丰富的应用程序,使用WCF作为可能的通信框架 我将在Windows服务中托管服务(因此使用WCF时,我将使用netTcpBinding) 现在,我想我可以将每个服务操作定义为一个单独的服务契约,但是可能会有很多操作,我宁愿将它们划分为几个有凝聚力的服务契约 将我的操作拆分为一组服务合同是否意味着我必须在一个单独的端口上托管每个服务?(这并不理想,因为我更喜欢在一个端口上运行它。) 关于这个场景有什么设计技巧吗?谢谢:) 更新 很抱歉造成混淆-我无意在不同的合同中主持每个服务操作,只是为了合理地将它们分组。我的问题源于这样一个事实,即我认为不可能在一个端口上承载多个ServiceHosts Joe说,在一个端口上托管多个服务主机是可能的。我想我一定是误解了一个异常消息,当我最初尝试这一点。如果我能做到这一点,那么我认为这将是我最喜欢的解决方案 我认为@Koystya和co在单个具体对象上实现每个接口并将其托管在单个ServiceHost中的方法也是解决我问题的一个很好的实用方法。特别是如果你把一个具体的物体当作一种门面。我能想到的一个缺点是,根据合同的不同,您不能有不同的服务行为.net WCF客户机/服务器模型,.net,wcf,.net,Wcf,我希望使用客户机/服务器模型创建一个功能丰富的应用程序,使用WCF作为可能的通信框架 我将在Windows服务中托管服务(因此使用WCF时,我将使用netTcpBinding) 现在,我想我可以将每个服务操作定义为一个单独的服务契约,但是可能会有很多操作,我宁愿将它们划分为几个有凝聚力的服务契约 将我的操作拆分为一组服务合同是否意味着我必须在一个单独的端口上托管每个服务?(这并不理想,因为我更喜欢在一个端口上运行它。) 关于这个场景有什么设计技巧吗?谢谢:) 更新 很抱歉造成混淆-我无意在不同的
此外,我也同意Joe的逻辑,即何时适合在一个具体类上实现多个服务契约。一个服务可以公开多个服务契约
我将创建作为一个类实现的WCF服务,该类本身实现了几个具有[ServiceContract]属性的接口。一个服务可以公开多个服务契约
我将创建作为一个类实现的WCF服务,该类本身实现了几个具有[ServiceContract]属性的接口。正如@Koistya所写的,这是可能的。
这里有一个完整的例子:。正如@Koistya所写,这是可能的。 下面是一个完整的示例: 我想我可以将每个服务操作定义为一个单独的服务契约,但是可能有很多操作,我宁愿将它们划分为几个有凝聚力的服务契约 将操作分组到有凝聚力的服务契约中是有意义的。粒度(例如,每个服务契约的操作数)将取决于您的应用程序,但每个操作一个服务契约似乎是极端的 将我的操作拆分为一组服务合同是否意味着我必须在一个单独的端口上托管每个服务 一点也不,您可以在同一个端口上有多个服务合同 您可以有一个实现多个服务契约的具体类。但是:
- 这是一个内部实现细节
- 在这种情况下,让他们成为同一服务合同的一部分可能是有意义的
- 这是一个内部实现细节
- 在这种情况下,让他们成为同一服务合同的一部分可能是有意义的
Marc为什么您要考虑将每项业务纳入其自己的服务合同?你打算从中得到什么 基本上,一个服务合同可以有任意多个标记为[OperationContract]的操作。这可能更有意义 如果您具有不同的功能,则始终可以定义多个ServiceContract(作为接口),并让您的服务类实现所有这些功能,并在单个地址(包括端口)上承载一个服务类(具有所有ServiceContract接口)
马克谢谢乔。您会说:“一点也不,您可以在同一个端口上有多个服务合同。”我可以选择什么来实现这一点?(除了@Koistya的建议)@Chris,为什么不创建多个ServiceContract接口和一个具体实现?(您可以将这个类拆分为几个部分类,以便更好地组织您的项目结构),其余部分在.config文件中完成共享p没有什么特别的事情要做
[ServiceContract]
public interface IMyService1
{
[OperationContract]
void SomeOperation1;
[OperationContract]
void SomeOperation2;
}
[ServiceContract]
public interface IMyService2
{
[OperationContract]
void SomeOperation21;
[OperationContract]
void SomeOperation22;
}
public class MyServiceClass : IMyService1, IMyService2
{
void SomeOperation1;
void SomeOperation2;
void SomeOperation21;
void SomeOperation22;
}