以编程方式配置具有不同WCF配置的单个WCF操作

时间:2009-01-16 11:35:10

标签: c# .net wcf configuration

我刚刚开始使用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中的每个操作(如上所述)?

如果我没有清楚地解释清楚,请告诉我。

提前感谢您的帮助, 将

3 个答案:

答案 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请求/响应层遵循这种方法。看看这个,这是非常有用和可扩展的

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