通过Windows服务托管WCF服务Lib获取System.InvalidOperationException:尝试启动WCF服务

时间:2010-04-23 12:32:17

标签: windows windows-services wcf-binding

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

无法启动服务。 System.InvalidOperationException:服务'[Fubu.Conversion.Service1'具有零应用程序(非基础结构)端点。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为没有在服务元素中定义端点。    在System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription description)    在System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description,ServiceHostBase serviceHost)    在System.ServiceModel.ServiceHostBase.InitializeRuntime()    在System.ServiceModel.ServiceHostBase.OnBeginOpen()    在System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan超时)    在System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时)    在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.congfig摘要                                                     

<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
{

对于一个没有运气的解决方案,我看起来“高低”。答案显而易见吗?对此的解决方案似乎并非如此。感谢

1 个答案:

答案 0 :(得分:1)

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

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