2009-01-16 63 views
0

我刚开始使用WCF并希望建立一个分发网络系统如下:(但我不知道这是否是可能的。)编程方式配置个别WCF操作不同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中以编程方式配置每个操作(如上所述)?

请让我知道,如果我没有清楚地解释我自己。

在此先感谢您的帮助, 请问

回答

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。不同的baseAddress和端口用于调试,测试和生产。

为防万一不明确,serviceImp是服务实现,serviceDef是定义合同的接口。希望这可以帮助。

编辑 - 这里有一些引用我曾经帮助我的所有的这些东西了:

Creating WCF Service Host Programmatically
Net.Tcp Port Sharing Sample, Part 2
Service Station: WCF Addressing In Depth

1

据我知道你不能指定配置按每个操作进行。最低级别是界面级别。最简单(丑陋)的解决方案是将每个操作放在单独的界面中。

+0

感谢帕维尔是知道的非常有用的。 – WillH 2009-01-18 22:48:36

0

将每个操作放在单独的界面中是一种有效且良好的设计方法。阿加莎请求/响应层采用这种方法。看看这个,这是非常有用的,可扩展的

http://code.google.com/p/agatha-rrsl/