Wcf 设计问题-在DLL级别处理.NET应用程序配置

Wcf 设计问题-在DLL级别处理.NET应用程序配置,wcf,.net-3.5,configuration,Wcf,.net 3.5,Configuration,我有一个现有的基于.NET3.5的框架,可以使用自定义插件进行扩展。总之,插件实现了一个公共接口,核心框架通过反射调用这些接口。该框架工作完美,一切都很好,但是 我现在需要一个与WCF服务通信的插件。从表面上看,这很简单,向插件添加一个服务引用,调用客户端代理代码,然后我们就可以开始了。然而 由于.NET配置的工作方式,WCF服务客户端配置应该驻留在正在执行的应用程序的app.config中。在本例中,这是我的插件调用程序应用程序。问题是它破坏了插件“模型”,因为通用调用程序应用程序现在必须在其

我有一个现有的基于.NET3.5的框架,可以使用自定义插件进行扩展。总之,插件实现了一个公共接口,核心框架通过反射调用这些接口。该框架工作完美,一切都很好,但是

我现在需要一个与WCF服务通信的插件。从表面上看,这很简单,向插件添加一个服务引用,调用客户端代理代码,然后我们就可以开始了。然而

由于.NET配置的工作方式,WCF服务客户端配置应该驻留在正在执行的应用程序的app.config中。在本例中,这是我的插件调用程序应用程序。问题是它破坏了插件“模型”,因为通用调用程序应用程序现在必须在其内部具有特定于插件的配置

所以问题是,有没有人知道一种替代机制,可以在不将WCF服务客户端配置放入核心调用程序应用程序配置的情况下处理WCF服务客户端配置


在进行了一些搜索之后,有一些机制允许使用DLL。这里的问题是,我无法访问服务代理创建的下划线代码,因此似乎无法重定向配置读取。

WCF客户端的端点也可以通过编程方式进行配置

下面的示例演示了如何在不需要配置文件的情况下调用WCF服务:

var myBinding = new BasicHttpBinding();
var myEndpoint = new EndpointAddress("http://localhost/myservice");
var client = new MyServiceClient(myBinding, myEndpoint);

try
{
    client.MyServiceOperation();
    client.Close();
}
catch
{
    if (client != null)
    {
        client.Abort();
    }
}
相关资源:


    • 回答我自己的问题:

      我似乎在这里找到了解决问题的办法:

      总之,这允许您指定一个自定义配置文件,该文件包含由Visual Studio生成的WCF配置,这意味着可以轻松维护配置


      运行了两个快速测试后,它似乎可以正常工作(在这里和那里进行了一些调整(参见页面上的注释)

      我确实考虑了这个选项,但是,能够使用WCF配置并能使用所有的属性等是有益的。如果我去编程绑定等等,那么我将不得不管理所有的配置我自己-它也可能打破未来的事情。NET发布。如果你想保持插件主机完全孤立的FR。从外部插件的实现细节来看,你最好的办法是为插件作者定义一套设计指南。在这些指南中,你将描述他们应该如何处理自定义配置设置,例如通过拥有自定义配置文件并通过API读取它们。以及框架和lugin developer这些指导原则有点含蓄:)我们已经有了使用自己配置文件的插件,但这些插件目前都使用基本的应用程序设置或自定义配置部分。WCF配置的问题是,我找不到方法告诉WCF服务客户端构造函数使用正在执行的应用程序应用程序以外的任何东西。配置我可能完全不了解这个问题,但是否可以扩展插件契约以包括服务初始化的方法?然后让您的基于服务的插件实现与一般契约相反的契约。这将允许您将服务初始化的内容卸载给插件开发人员,而不必担心初始化的细节。