Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务的客户端配置文件的零依赖性_Wcf_Configuration Files - Fatal编程技术网

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

WCF服务的客户端配置文件的零依赖性,wcf,configuration-files,Wcf,Configuration Files,我们的目标是对WCF服务的客户端配置文件实现零依赖。 我们正在使用ConfigurationChannelFactory()创建通道并指定ConfigSettings 使用以下代码加载ConfigSettings ConfigurationManager.OpenExeConfiguration(ConfigFilePath) 因此,我们必须在这里提供ConfigFilePath 我们有windows和web客户端 我们使用了以下方法来找出路径 AppDomain.CurrentDomain.B

我们的目标是对WCF服务的客户端配置文件实现零依赖。 我们正在使用ConfigurationChannelFactory()创建通道并指定ConfigSettings

使用以下代码加载ConfigSettings

ConfigurationManager.OpenExeConfiguration(ConfigFilePath)

因此,我们必须在这里提供ConfigFilePath

我们有windows和web客户端

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

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


  • Web客户端:AppDomain.CurrentDomain.BaseDirectory提供 web应用程序,使其工作正常
  • Windows客户端:AppDomain.CurrentDomain.BaseDirectory提供了调试/发布文件夹的路径 因此,它抛出了错误
  • Assembly.getExecutionGassembly().Location


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

    <hostingenvironment shadowcopybinassemblies="false">
    
    
    
    但它增加了对客户端的依赖性


    你们能帮我找到路径而不用担心客户吗?你们试过这个吗?我使用了
    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);
           }
    }
    

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