none
如何在服务端(Host)或客户端(Client)使用自定义名称的配置文件(不叫app.config),而且代码简洁。 RRS feed

  • 问题

  • 关键词:自定义名称(而非自定义内容),自定义名称的配置文件格式符合标准的WCF配置文件(因为使用app.config名字的配置文件程序正常运行),

    问题一句话概括:我有一个WCF的工程,能够正常运行,但是如果把Host端(或Client端)的app.config重命名为host.config,程序将找不到配置文件。请问如果用简洁的代码访问自定义名称的配置文件。

     

    在我的Host程序(Windows Console)中,有这样的代码:

     static void Main(string[] args) {
     using (var host=new ServiceHost(typeof(Server.Settings.Configration))) {
     host.Open();
     Console.WriteLine("WCF服务已经启动,按任意键终止……");
     Console.Read();
     } 
     }
    

    它会读取工程的App.config。如果我把它命名成host.config,程序将找不到配置文件(截图见最后)。

    请问如何在Host端或者Client端使用任意名称的配置文件,同时代码简洁,最好不要直接操作XML文件。

    我知道.NET中有个类叫 System.Configuration.ConfigurationManager,但不知道如何用在WCF的配置读取中。而且ConfigurationManager也只是方便的读取XML而已。ServiceHost有没有这样的属性,在我上面的程序开始的时候:

    string fileName = "host.config";

    ServiceHost.ConfigurationFile = fileName;

     

     

     

     


    Debug my heart...

    • 已编辑 Lyu KingT 2010年10月15日 3:32 修改错别字
    2010年10月15日 3:08

答案

  • 其实我也应该有和你类似的问题

    例如 WCF 相关的东西我都封装在单独的项目 MyWcfLib.dll ,添加引用后生成的 配置 信息也都生成到项目 MyWcfLib.dll config 文件

    项目 MyMain.exe

    App.config

    项目 MyWcfLib.dll

    App.config

     

    编译之后如下, 只有一个名为 MyMain.exe.config 的配置文件,其内容来自于 App.config ,所以 wcf 所需要的配置信息在运行时都找不到

    MyMain.exe

    MyWcfLib.dll

    MyMain.exe.config

     

     

    我的解决办法只是把 App.config ②的内容 全部拷贝到 App.config ,这样就可以生成包含完整信息的 MyMain.exe.config

    按说你的问题也可以如此解决

     

    至于多个 config 文件的管理,即使一个文件,写好注释分好段落,应该也不会太复杂。

    或者编译时用脚本或工具合并多个 config 文件也可以吧。

    • 已标记为答案 Lyu KingT 2010年10月18日 9:26
    2010年10月18日 2:17
  • 我将WCF和EF的配置放在app.config里面,突然解决了问题。

    我将WCF的Host段和Server处理部分放置相同的app.config,包括WCF和EF配置内容。

    EF模型类只有连接字符串,WCF客户段只有客户端配置。

     

    谢谢,如有疑问再来询问。


    Debug my heart...
    • 已标记为答案 Lyu KingT 2010年10月18日 9:26
    2010年10月18日 9:25

全部回复

  • 那你只能自己写代码

    1。独立自定义配置文件,路径、文件名你、内容节点要自己约定好。

    2。在实例化服务的时候,自己来设置服务的相关属性,包括安全、终结点等。

     

    app.config,.net已经提供了一套机制。

    自己实现的话,反而更加麻烦啊。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    2010年10月15日 5:21
    版主
  • 那你只能自己写代码

    1。独立自定义配置文件,路径、文件名你、内容节点要自己约定好。

    2。在实例化服务的时候,自己来设置服务的相关属性,包括安全、终结点等。

     

    app.config,.net已经提供了一套机制。

    自己实现的话,反而更加麻烦啊。

     

    谢谢答复。

    我想再次强调一下,我的配置文件只是名字不同,内容完全按照WCF的配置规则来写的。

    就是app.config改名成host.config之后就没法运行了。异常截图见一楼的图片。

     


    Debug my heart...
    2010年10月15日 5:35
  • 再有,我为什么要重命名app.config文件(是重命名,而不是修改其中的内容):

    我最近的一个WCF项目,在服务端对数据的处理上使用了ADO .NET Entity Framework,WCF和EF都需要配置文件,而且默认都是app.config。这样就会有冲突。

    参见相关问题帖子:

    http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/e7726378-d754-4258-8bf3-fcb7b32db7fb

    http://social.msdn.microsoft.com/Forums/zh-CN/adonetzhchs/thread/a38e9395-9356-46b4-9860-ec2f079ae514


    Debug my heart...
    2010年10月15日 6:15
  • http://stackoverflow.com/questions/439538/changing-the-net-application-configuration-file-name

    看看有没有帮助

    2010年10月15日 6:26
  • 你好,我通过那个帖子里面的AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @configFile);解决了一部分问题,但是对于我一个解决方案中不同的项目有不同的配置文件,而项目之间有一定的依赖关系(就是引用)的这种情况,上面的方法有些不适用。。

    请看看我的这个问题。

    http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/e7726378-d754-4258-8bf3-fcb7b32db7fb


    Debug my heart...
    2010年10月15日 9:02
  • 不太明白你的具体情况,不过把wcf和ef的配置都写在同一个App.config文件中应该也无所谓吧。

    wcf和ef都会无视掉不属于自己的配置Element

    2010年10月15日 12:04
  • 不太明白你的具体情况,不过把wcf和ef的配置都写在同一个App.config文件中应该也无所谓吧。

    wcf和ef都会无视掉不属于自己的配置Element

    我尝试把WCF和EF的配置写在同样的app.config里面,但并没有解决问题。

    我希望能够使用任意名称的配置文件(这样便于区分,也便于管理),而不是只能使用叫app.config的配置。


    Debug my heart...
    2010年10月18日 0:13
  • 其实我也应该有和你类似的问题

    例如 WCF 相关的东西我都封装在单独的项目 MyWcfLib.dll ,添加引用后生成的 配置 信息也都生成到项目 MyWcfLib.dll config 文件

    项目 MyMain.exe

    App.config

    项目 MyWcfLib.dll

    App.config

     

    编译之后如下, 只有一个名为 MyMain.exe.config 的配置文件,其内容来自于 App.config ,所以 wcf 所需要的配置信息在运行时都找不到

    MyMain.exe

    MyWcfLib.dll

    MyMain.exe.config

     

     

    我的解决办法只是把 App.config ②的内容 全部拷贝到 App.config ,这样就可以生成包含完整信息的 MyMain.exe.config

    按说你的问题也可以如此解决

     

    至于多个 config 文件的管理,即使一个文件,写好注释分好段落,应该也不会太复杂。

    或者编译时用脚本或工具合并多个 config 文件也可以吧。

    • 已标记为答案 Lyu KingT 2010年10月18日 9:26
    2010年10月18日 2:17
  • 我将WCF和EF的配置放在app.config里面,突然解决了问题。

    我将WCF的Host段和Server处理部分放置相同的app.config,包括WCF和EF配置内容。

    EF模型类只有连接字符串,WCF客户段只有客户端配置。

     

    谢谢,如有疑问再来询问。


    Debug my heart...
    • 已标记为答案 Lyu KingT 2010年10月18日 9:26
    2010年10月18日 9:25
  • 我将WCF和EF的配置放在app.config里面,突然解决了问题。

    我将WCF的Host段和Server处理部分放置相同的app.config,包括WCF和EF配置内容。

    EF模型类只有连接字符串,WCF客户段只有客户端配置。

     

    谢谢,如有疑问再来询问。


    Debug my heart...

    呵呵,恭喜。这种事儿真是常有。简单问题经常给想复杂了
    2010年10月20日 2:29