如何使用类库的应用程序设置?

时间:2011-03-07 00:02:49

标签: .net wcf appsettings

我有两个项目。

一个是引用Web服务的WCF代理项目。我希望这个项目包含我与Web服务交互的所有逻辑。

我还有一个测试项目,我想称之为代理项目。

问题是我在WCF代理项目中拥有所有配置设置,如端点等。当我运行它时,我收到此错误,说它无法找到端点。

  

无法找到默认端点   引用合同的元素   'AlumniWebService.IAlumniWebService'   在ServiceModel客户端中   配置部分。这可能是   因为没有配置文件   找到您的申请,或因为   没有匹配此的端点元素   合同可以在客户端找到   元件。

我必须将所有WCF Web服务配置放在测试项目中,以便我调用Web服务。

这个Web服务可能不仅仅是由这个测试项目消耗,可能还有几个Web应用程序,所以我希望我的配置在代理项目中,以便不必有多个版本。

如何获取要引用的代理项目的Web配置?

2 个答案:

答案 0 :(得分:3)

默认情况下,.NET配置系统不会查看类库配置文件。它们是作为样本创建的,作为帮助者 - 但它们并未被使用。您需要将配置放入将使用类库的主应用程序中,以便“激活”并使用它。

你可以通过一些手工工作做的一件事是:

  • <system.serviceModel>的每个子元素放入单独的文件
  • 引用主配置中的内容:

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

通过这种方式,您可以拥有一组“外部化”配置文件,并从任意数量的其他项目中引用它们。

Visual Studio没有正确地了解这一点,并将突出显示为错误 - 但相信我 - 它确实有效! (这只是一个VS缺陷,它不理解任何配置部分的configSource=属性)

那些外部配置文件将只包含该特定部分的位,因此您的bindings.config将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<bindings>
    <basicHttpBinding>
         <binding name="YourBindingName" 
                  receiveTimeout="00:02:00" sendTimeout="00:02:00"
                  maxBufferSize="512000" maxBufferPoolSize="524288" 
                  maxReceivedMessageSize="512000"
                  useDefaultWebProxy="false">
              <security mode="None" />
         </binding>
    </basicHttpBinding>
</bindings>

答案 1 :(得分:0)

可以将自定义web.config(支持具有应用程序设置的web.config)导入主web.config,但我不认为您可以将服务端点配置从支持web.config导入到主web.config。

如果您只关心在测试应用程序中配置服务,那么只需将服务引用添加到测试应用程序中,Visual Studio将根据主机应用程序的配置自动在测试应用程序中配置您的设置。