2

.net 4.0

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

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

<client>  
    <endpoint/> 
<client/> 

由两个 Web 应用程序从共同的地方共享?

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) 和 client.config 中提及 VStudio 大喊设计时间但运行良好?

4

3 回答 3

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配置文件 ( ) - 但您可以将某些部分“外部化”为单独的外部文件并像这样共享它们。

于 2012-11-29T12:10:49.900 回答
0

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

于 2012-11-29T13:17:07.050 回答
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 服务的更新时,这非常有用。

此 SO 答案中的更多详细信息:使用 ConfigurationManager 从任意位置加载配置

于 2013-12-19T22:36:13.440 回答