2009-01-16 64 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/