2017-02-20 77 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服务的配置文件。

我不知道应用程序在终端服务中运行的事实有什么区别,但至少这是一个简单的修复。

相关问题