使用带有自定义配置路径的wcf服务

时间:2017-02-20 11:57:51

标签: wcf

我正在努力使用自定义配置文件在程序集库中调用WCF服务。 WCF服务在Citrix Xen Server环境中运行,这可能是导致问题的原因。

我已经设置了一个引用程序集库的控制台应用程序,并调用该库中连接到WCF服务端点的公共方法,并显示从Win Forms Datagrid内部调用WCF函数派生的数据。

现在我正在为汇编库显示的Win Forms类'E2ADokumente'的构造函数中设置当前app域的配置路径:

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通道设置不是一种选择。

1 个答案:

答案 0 :(得分: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服务的配置文件。

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

相关问题