【问题标题】:Hosting a WCF Service Lib through a Windows service get a System.InvalidOperationException: attempting to start WCF Service通过 Windows 服务托管 WCF 服务库获得 System.InvalidOperationException:尝试启动 WCF 服务
【发布时间】:2011-02-11 12:15:49
【问题描述】:

我有一个包含五个服务合同的 WCF 服务库。该库通过 Windows 服务托管。我对 WCF 库的大多数配置(如果不是全部的话)都是声明性的。我在配置代码中唯一要做的就是将实现服务合同的类的类型传递给 ServiceHost。然后,我在 Windows Service OnStart 事件期间对每个服务调用 Open。这是我收到的错误消息:

服务无法启动。 System.InvalidOperationException:服务“[Fubu.Conversion.Service1”的应用程序(非基础设施)端点为零。这可能是因为找不到您的应用程序的配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中没有定义端点。 在 System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription 描述) 在 System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription 描述,ServiceHostBase 服务主机) 在 System.ServiceModel.ServiceHostBase.InitializeRuntime() 在 System.ServiceModel.ServiceHostBase.OnBeginOpen() 在 System.ServiceModel.ServiceHostBase.OnOpen(时间跨度超时) 在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度超时) 在 System.ServiceModel.Channels.CommunicationObject.Open() 在 Fubu.RemotingHost.RemotingHost.StartServ...

    protected override void OnStart(string[] args)
    {
        // Uncomment to debug this properly
        //System.Diagnostics.Debugger.Break();
        StartService1();
        StartService2();
        StartService3();
        StartService4();
        StartService5();
    }

上述每一项都只需执行以下操作:

    private void StartSecurityService()
    {
        host = new ServiceHost(typeof(Service1));
        host.Open();
    }

Service Lib app.config 总结

<services>
  <service behaviorConfiguration="DefaultServiceBehavior" name="Fubu.Conversion.Service1">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="TCPBindingConfig"
      name="Service1" bindingName="TCPEndPoint" contract="Fubu.Conversion.IService1">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
      name="mexSecurity" bindingName="TcpMetaData" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8025/Fubu/Conversion/Service1/" />
      </baseAddresses>
    </host>
  </service>

...

合约设置如下: 命名空间 Fubu.Conversion.Service1 {

[ServiceContract(Namespace = "net.tcp://localhost:8025/Fubu")]
public interface IService1
{

我一直在寻找“高低”的解决方案,但没有任何运气。答案很明显吗?对此的解决方案似乎不是。谢谢

【问题讨论】:

    标签: windows windows-services wcf-binding


    【解决方案1】:

    原因很简单!!! 正如我在问题的解释中所指出的,我在 Windows 服务中托管了一个 WCF 服务库。我在 WCF 服务库项目中错误地定义和定位了 app.config 文件。我确保 app.config 文件始终输出到构建时的 bin 文件夹。一旦我将此配置文件重新定位或复制到 Windows 服务项目,问题就解决了,所有 5 个服务都正确启动。另一点需要注意的是确保为各个服务定义的端点正在使用唯一的端口。

    故事的寓意: "确保在将托管您的服务库的项目中定义并找到 app.config 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多