C# 以编程方式使用不同的WCF配置配置单个WCF操作
我刚刚开始使用WCF,并希望建立一个可分发的网络系统,如下所示:(但不确定是否可行。) 我有一个具有业务逻辑的.net客户端。它将需要来自不同来源的各种数据,因此我想添加一个“服务器”,其中包含内存缓存,但也包含WCF功能,以便从数据源发送/接收和发布/订阅未缓存的数据。我认为这些服务器应用程序在代码方面应该是相同的,但高度可配置的,以便可以以对等方式处理请求,或者根据需要使用传统的客户机-服务器。我认为可以这样做,本质上,服务器向配置了端点的任何地方发送请求并获得响应 基本上,服务器的配置如下所示:C# 以编程方式使用不同的WCF配置配置单个WCF操作,c#,.net,wcf,configuration,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中的每个操作(如上所述)
如果我没有解释清楚,请告诉我
提前感谢您的帮助,
Will我不知道这是否能满足您的需求,但我知道这是我用来将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);
}
IDictionary主机;
有约束力;
定制绑定;
私有void AddService(类型serviceImp、类型serviceDef、字符串serviceName)
{
ServiceHost主机=新的ServiceHost(serviceImp);
string address=string.Format(baseAddress、wcfPort、serviceName);
字符串endAdd=地址;
字符串mexAdd=地址+“/mex”;
ServiceMetadataBehavior行为=新ServiceMetadataBehavior();
host.Description.Behaviors.Add(行为);
AddServiceEndpoint(serviceDef、binding、endAdd);
AddServiceEndpoint(typeof(imeadataexchange)、mexBinding、mexAdd);
host.Open();
添加(serviceDef.Name,host);
}
有一个baseAddress
字符串我没有复制进去,但它只有端点的net.tcp地址。同样,对于wcfPort
。不同的基址和端口用于调试、测试和生产
如果不清楚,serviceImp
是服务实现,serviceDef
是定义合同的接口。希望这有帮助
编辑-以下是我用来帮助我理解所有这些东西的一些参考资料:
据我所知,您不能根据每个操作指定配置。最低级别是接口级别。最简单(丑陋)的解决方案是将每个操作放在单独的接口中。将每个操作放在单独的接口中是一种有效且良好的设计方法。Agatha请求/响应层遵循这种方法。看看这个,这是非常有用和可扩展的
感谢Pawel,了解它非常有用。将每个操作放在单独的界面中是一种有效且良好的设计方法。Agatha请求/响应层遵循这种方法。看看这个,这是非常有用和可扩展的