WCF服务的客户端配置文件的零依赖性

时间:2011-08-09 11:53:15

标签: wcf configuration-files

我们的目标是从WCF服务的客户端配置文件中获得零依赖性。 我们正在使用ConfigurationChannelFactory()来创建通道并指定ConfigSettings。

使用以下代码加载ConfigSettings

ConfigurationManager.OpenExeConfiguration(ConfigFilePath);

所以我们必须在这里提供ConfigFilePath。

我们有Windows和Web客户端。

我们使用以下方法找出路径

AppDomain.CurrentDomain.BaseDirectory + "bin\\" + executingAssembly.GetName().Name + ".dll"


  1. Web客户端:AppDomain.CurrentDomain.BaseDirectory给出了根文件夹 网络应用程序,以便正常工作
  2. Windows客户端:AppDomain.CurrentDomain.BaseDirectory提供调试/发布文件夹的路径 所以,它的抛出错误
  3.   

    Assembly.GetExecutingAssembly()。位置


    1. Web客户端:Assembly.GetExecutingAssembly()。Location提供ASP.Net temp的路径。 文件,我们没有配置文件。所以它抛出错误
    2. Windows客户端:Assembly.GetExecutingAssembly()。位置提供正确的位置, 所以它的工作正常
    3. 为了使其在Web客户端中运行,我们必须在客户端的web.config文件中添加以下密钥。

      <hostingenvironment shadowcopybinassemblies="false">
      

      但它增加了对客户端的依赖。

      你能帮助我找到路径而不用担心客户吗?

2 个答案:

答案 0 :(得分:1)

你试过这个吗?我使用GetCallAssembly()代替GetExecutingAssembly(),因为它位于我们项目的实用程序类中。

public static string AssemblyDirectory 
{ 
    get{
        string codeBase = assembly.GetCallingAssembly().CodeBase; 
        UriBuilder uri = new UriBuilder(codeBase); 
        string path = Uri.UnescapeDataString(uri.Path); 
        return Path.GetDirectoryName(path);
       }
}

答案 1 :(得分:0)

你能探测两条路吗?换句话说,检查Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“bin”)文件夹,如果在那里找不到配置文件,请检查Assembly.GetExecutingAssembly()。位置文件夹?既然你指出第一种方法适用于网络但不适用于Windows客户端,而第二种方法适用于Windows客户端而不适用于网络,请同时使用这两种方法!