2017-02-20 78 views
0

我正在使用自定義配置文件在裝配庫內調用WCF服務。 WCF服務在Citrix Xen Server環境中運行,這可能是問題的原因。使用具有自定義配置路徑的wcf服務

我已經設置了一個控制檯應用程序,它引用程序集庫並調用該庫中的一個公共方法,該方法連接到WCF服務端點,並顯示Win窗口數據網格內WCF函數調用派生的數據。

現在我設定一個由組件庫中顯示的贏窗體類的E2ADokumente'的構造函數中的當前應用程序域的配置路徑:

var assembly = Assembly.GetAssembly(typeof(E2ADokumente)); 
var assemblyFilePath = assembly.Location; 
var assemblyDirectory = Path.GetDirectoryName(assemblyFilePath); 
var dllName = assembly.GetName().Name + ".dll.config"; 
string configPath = Path.Combine(assemblyDirectory, dllName); 
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath); 

的WCF代理是建立像這樣:

WSTrustChannelFactory channelFactory = new WSTrustChannelFactory("STSEndpunkt") 

「STSEndpunkt」是端點的名稱,在配置文件中定義。

如果我在本地運行代碼,但如果我在終端服務環境中運行相同的應用程序,配置文件將不會被找到,所有的作品。錯誤消息指出無法找到「STSEndpunkt」。

它在終端服務環境中工作,但是如果我在新的應用程序域內運行裝配庫。但是通過反射來創建單獨的圖層和調用方法會帶來很多開銷,所以我正在尋找更簡單的解決方案。

如何在終端服務中運行的程序集庫中爲WCF配置詳細信息設置配置文件的路徑?

在代碼中構建WCF通道設置不是一個選項。

回答

0

我在google-fu後找到了一個解決方案。

程序集庫的配置路徑的設置如果在類的靜態構造函數內完成,它的工作方式將起作用。

static E2ADokumente() 
{ 
    var assembly = Assembly.GetAssembly(typeof(E2ADokumente)); 
    var assemblyFilePath = assembly.Location; 
    var assemblyDirectory = Path.GetDirectoryName(assemblyFilePath); 
    var dllName = assembly.GetName().Name + ".dll.config"; 
    string configPath = Path.Combine(assemblyDirectory, dllName); 
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath); 
} 

之後,裝配庫加載了WCF服務的配置文件。

我不知道應用程序在終端服務中運行的事實有什麼區別,但至少這是一個簡單的修復。

相關問題