在 WCF 服务应用程序中从单独的 dll 托管 WCF 服务

Hosting WCF service from separate dll in WCF service application

我在服务库中有一个 WCF 服务,我正在尝试在 WCF 服务应用程序中托管它。我相应地修改了 .svc 文件

<%@ ServiceHost Language="C#" Debug="true" Service="Mandrake.Service.OTAwareService" Factory="Mandrake.Service.OTServiceHostFactory"  %>

并且我将最初在服务库的应用程序配置中的内容添加到服务应用程序的 web.config 文件中。我认为它会覆盖库 app.config 中定义的设置,但结果是如果我从库中删除 app.config 文件并在 IIS 上托管服务应用程序 web.config 包含必要的端点设置(以前有效)服务没有启动,并说我没有定义端点。

我的web.config的servicemodel部分如下:

<system.serviceModel>

<serviceHostingEnvironment>
  <serviceActivations>
    <add service="Mandrake.Service.OTAwareService"
         factory="Mandrake.Service.OTServiceHostFactory"
         relativeAddress="OTService.svc"/>
  </serviceActivations>
</serviceHostingEnvironment>

<behaviors>
  <serviceBehaviors>
    <behavior name="StandardBehavior">
      <serviceMetadata />
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="Mandrake.Service.OTAwareService" behaviorConfiguration="StandardBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8062/OTService"/>
      </baseAddresses>
    </host>

    <endpoint address="" binding="netTcpBinding" name="TcpEndpoint" contract="Mandrake.Service.IOTAwareService" />
    <endpoint address="mex" binding="mexTcpBinding" name="MetadataEndpoint" contract="IMetadataExchange" />

  </service>
</services>
</system.serviceModel>

有没有一种方法可以在我的服务应用程序中从服务库托管此服务?

很可能您在托管服务应用程序的网站上没有启用 net.tcp 绑定。如果 net.tcp 存在于绑定列表中,请检查 iis。