我刚刚开始使用WCF,并希望按如下方式设置可分发的联网系统:(但不确定是否可行。)
我有一个具有业务逻辑的.net客户端。它将需要来自各种来源的各种数据,因此我想添加一个“服务器”,其中包含内存缓存,但还有WCF功能,可以从数据源发送/接收和发布/订阅未缓存的数据。我认为这些服务器应用程序在代码方面应该是相同的,但是可以高度配置,以便可以按照对等方式处理请求,或者根据需要处理传统的客户端服务器。我认为可以这样做,以便基本上服务器向其配置端点的任何地方发送请求并获得响应。
本质上服务器的配置如下:
Server A
========
Operation 1 - Endpoint I
Operation 2 - Endpoint II
Server B
========
Operation 1 - Endpoint IV
Operation 2 - Endpoint III
将在app.config中为每个服务器存储配置,并在启动时将其加载到内存中。因此,每个WCF操作都有自己的WCF配置(就端点等而言),它会根据该配置将特定请求发送到不同的地方。
根据我所读到的WCF,我认为这是可能的。我不知道有足够的经验知道这是否是我所描述的标准WCF模式(如果是这样,请告诉我)。否则,我的主要问题是,如何以编程方式配置WCF中的每个操作(如上所述)?
如果我没有清楚地解释清楚,请告诉我。
提前感谢您的帮助, 将
答案 0 :(得分:1)
我不知道这是否能让你得到你想要的东西,但我这就是我用来将我的WCF端点添加到我的Windows服务中。这是服务运行以加载所有wcf服务的代码:
IDictionary<string, ServiceHost> hosts;
NetTcpBinding binding;
CustomBinding mexBinding;
private void AddService(Type serviceImp, Type serviceDef, string serviceName)
{
ServiceHost host = new ServiceHost(serviceImp);
string address = String.Format(baseAddress, wcfPort, serviceName);
string endAdd = address;
string mexAdd = address + "/mex";
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(behavior);
host.AddServiceEndpoint(serviceDef, binding, endAdd);
host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, mexAdd);
host.Open();
hosts.Add(serviceDef.Name, host);
}
我没有复制的baseAddress
字符串,但它只有端点的net.tcp地址。同样适用于wcfPort
。不同的baseAddresses和端口用于调试,测试和生产。
如果不清楚,serviceImp
是服务实现,serviceDef
是定义合同的接口。希望这会有所帮助。
编辑 - 以下是我用来帮助我解决所有这些问题的一些参考资料:
Creating WCF Service Host Programmatically
Net.Tcp Port Sharing Sample, Part 2
Service Station: WCF Addressing In Depth
答案 1 :(得分:1)
据我所知,您不能在每个操作的基础上指定配置。最低级别是接口级别。最简单(丑陋)的解决方案是将每个操作放在一个单独的界面中。
答案 2 :(得分:0)
将每个操作放在一个单独的界面中是一种有效且良好的设计方法。 Agatha请求/响应层遵循这种方法。看看这个,这是非常有用和可扩展的