控制台应用程序中的主机WCF服务

时间:2012-02-13 16:26:50

标签: wcf

我有大约15-20个服务 - 每个服务都有自己的合同和实施文件。我想在控制台应用程序中托管所有这些服务,以便在开发过程中更容易调试。

项目结构

  • 服务 - 解决方案
    • ServiceContracts - Project
    • 实施 - 项目
    • ServiceHost - Windows服务项目 - 已经就位且工作正常..
    • ServiceConsoleHost - 项目 - 目前正在开展工作。

我在ServiceConsoleHost项目中有一个app.config文件,来自配置文件的示例文本......

<service name="TestpricingService" behaviorConfiguration="HostBehavior">
<host>
   <baseAddresses>
        <add baseAddress="http://localhost:8000/testService/pricingService"/>
   </baseAddresses>
</host>
    <!-- use base address provided by host -->
    <endpoint address="net.tcp://localhost:820/testService/pricingService"
                      binding="netTcpBinding"
                      bindingConfiguration="HostBinding"
                      contract="Test.Services.Contracts.IpricingService" />
    <!-- the mex endpoint is exposed at http://localhost:8000/testService/purchasing/mex -->
    <endpoint address="mex"
    binding="mexHttpBinding"
    contract="IMetadataExchange" />
</service>
<behaviors>
  <serviceBehaviors>
    <behavior name="HostBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="True" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
    <behavior name="PooledHostBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="True" />
      <ObjectPoolingServiceBehavior minPoolSize="0" maxPoolSize="5" idleTimeOut="30000"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

提前致谢...

2 个答案:

答案 0 :(得分:2)

您可能正在寻找自托管服务。使用ServiceHost查看有关自托管的MSDN Reference

另请查看enumerating WCF configuration bindings。这是一篇SO帖子,描述了enumerating WCF service and endpoint bindings

答案 1 :(得分:1)

众所周知,您需要15个ServiceHosts来托管15项服务。然而,他们没有阻止。如果您注意到MSDN代码只是在服务运行时等待按键。这意味着所有服务代码都在不同的线程上运行。因此,创建和托管15项服务不是问题。你不需要一个“循环”,因为一旦你做ServiceHost.Open()就已经处理过了。