【问题标题】:using a wcf service with a custom config path使用带有自定义配置路径的 wcf 服务
【发布时间】:2017-02-22 21:48:58
【问题描述】:

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

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

现在,我正在程序集库显示的 Win Forms 类“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 通道设置。

【问题讨论】:

    标签: wcf


    【解决方案1】:

    经过大量 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 服务的配置文件由程序集库加载。

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

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 2013-10-24
      • 2013-10-14
      相关资源
      最近更新 更多