在控制台应用程序中托管WCF:当前禁用此服务的元数据发布

时间:2014-03-15 19:02:00

标签: c# .net web-services wcf web-hosting

我有WCF应用程序,我使用控制台应用程序在本地托管它。我在下面添加了配置。

服务类

    namespace InboundMessage.Service;
    Operator: IOperator {

    }
    namespace InboundMessage.Service;
    IOperator {

    }

的App.config

    <configuration>
      <system.web>
        <compilation debug="true">
        </compilation>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="meta">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="InboundMessage.Service.Operator" behaviorConfiguration="meta" >
            <endpoint address="basic" binding="basicHttpBinding" contract="InboundMessage.Service.IOperator"/>
            <endpoint address="mex" binding="mexHttpBinding"  contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                           <add baseAddress = "http://X:Port/InboundMessage.Service/"/>
              </baseAddresses>
            </host>
          </service>
        </services>
      </system.serviceModel>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
    </configuration>

Host Project是一个在我的本地计算机上构建和安装的控制台应用程序。 配置文件包含服务的地址。

    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <appSettings>

        <add key="ServiceAddress" value="http://X:Port/InboundMessage.Service/"/>
      </appSettings>
      <system.webServer>
        <directoryBrowse enabled="true"/>
      </system.webServer>
    </configuration>

我一直在禁用此服务的元数据发布。我在设置中遗漏了什么。谢谢你的时间。

修改

它似乎仅在我在主机配置中添加以下内容时才起作用,但它似乎不是托管服务的正确方法。

    <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="meta">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="InboundMessage.Service.Operator" behaviorConfiguration="meta" >
            <endpoint address="basic" binding="basicHttpBinding" contract="InboundMessage.Service.IOperator"/>
            <endpoint address="mex" binding="mexHttpBinding"  contract="IMetadataExchange" />
          </service>
        </services>

      </system.serviceModel>

1 个答案:

答案 0 :(得分:2)

配置(包括WCF)必须位于执行的程序集的配置文件中。在您的情况下,它必须位于控制台应用程序的配置文件中。

将WCF添加到控制台应用程序使用的某个库的配置是不够的。这有两个原因:

  1. 在构建主(可执行)程序集时,默认情况下不会将库的配置复制到输出文件夹中。

  2. 即使被复制,也会有错误的名称。从与执行程序集同名的配置文件中读取WCF配置。

  3. 这不仅仅是针对WCF,而是.NET的工作方式。