使用app.config文件中的客户端端点

时间:2012-11-29 12:05:02

标签: asp.net wcf-client

.net 4.0

我有两个使用自己的web.config文件的Web项目,并使用相同的端点来调用相同的WCF Web服务。

两者都使用具有app.config文件的公共项目(dll)。我想将端点信息移动到该配置文件中 - 这可能吗?我想要端点信息

<client>  
    <endpoint/> 
<client/> 

来自普通地方的两个网络应用程序共享?

Web.config此处省略了文件绑定信息

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.serviceModel>
      <bindings/>          
      <client configSource="client.config">
   <system.serviceModel/>
</configuration>
共同项目中的

client.config文件

 <client>
      <endpoint
        name="endpoint1"
        address="http://localhost/ServiceModelSamples/service.svc"
        binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_IHello"
        behaviorConfiguration="IHello_Behavior"
        contract="IHello"/ >

道歉我改变了两件事 1. client.config有一个元素拿出来了。 2.在项目的构建属性中添加了COPY“$(TargetDir)*。config”“$(ProjectDir)”

在web.config(configSource)和&amp; client.config VStudio大喊设计时间但运行正常吗?

3 个答案:

答案 0 :(得分:1)

您可以通过“外包”来共享部分WCF配置:

<system.serviceModel>
    <client configSource="client.config" />
    .....
</system.serviceModel>

然后在client.config

中包含此内容
<?xml version="1.0" encoding="utf-8"?>
<client>
    <endpoint name="ABC"
        address="http://......."
        binding="......."
        contract="......" />
</client>

您不能将内容放入公共程序集的app.config中,因为.NET框架不会使用/查看这些配置文件。您需要将您的信息放入应用或网站(web.config)的配置文件中 - 但您可以将某些部分“外部化”为独立的部分,外部文件并像那样共享它们。

答案 1 :(得分:0)

我曾经在这种情况下工作,我认为这是不可行的。

答案 2 :(得分:0)

另一种方法是使用自定义ChannelFactory类,然后通过注入或默认规则指定client.config路径。

以下是如何编写接受自定义配置路径的自定义ChannelFactory: http://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on-the-client-side.aspx

我使用this.GetType.Assembly.GetExecutingAssembly().ManifestModule.Name + ".config"动态获取与我的共享库名称相匹配的默认配置文件。

您可以让两个Web应用程序使用配置路径实例化自定义ChannelFactory,或者您可以在公共库中添加一个与Web服务交互的抽象层,然后您的Web应用程序使用新的抽象对象而不是直接依赖Web服务。当您需要在不干扰Web应用程序的情况下适应Web服务的更新时,这非常有用。

此SO中的更多详细信息答案:Using ConfigurationManager to load config from an arbitrary location