“服务 X 的应用程序端点为零”,除非我在代码中添加端点 - 为什么?

2024-05-26

我跟着这篇 MSDN 文章 http://msdn.microsoft.com/en-us/library/ms733069.aspx完全创建托管在托管 NT 服务中的 WCF 服务。

当我在服务控制台中单击“开始”时,我会在事件查看器中看到以下内容:

服务无法启动。 System.InvalidOperationException:服务“MyServiceNamespace.RequestProcessorImpl”具有零应用程序(非基础设施)端点。这可能是因为没有找到应用程序的配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中没有定义端点。

我试图检查我能找到的所有可能的原因。以下是 App.Config 文件中的服务描述:

 <service name="MyServiceNamespace.RequestProcessorWindowsService"
           behaviorConfiguration="RequestProcessorServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8095/RequestProcessorService"/>
      </baseAddresses>
    </host>
    <endpoint address= ""
              binding="wsHttpBinding"
              contract="MyServiceNamespace.IRequestProcessor" />
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>

所有实体都是以它们的命名空间命名 https://stackoverflow.com/questions/2328840/service-has-zero-application-non-infrastructure-endpoints/3305260#3305260,所以这不是问题。 App.Config 文件被放置在 bin\Debug 中——正是 NT 服务的启动位置。

但当我改变我的ServiceBase后裔OnStart()从最初的实现来看:

public class RequestProcessorWindowsService : ServiceBase {
    public ServiceHost serviceHost = null;
    //other methods skipped 
    protected override void OnStart(string[] args)
    {
        if( serviceHost != null ) {
       serviceHost.Close();
        }
        serviceHost = new ServiceHost( typeof(RequestProcesssorImpl) );
        serviceHost.Open();
    }
}

到下一个,以便它调用AddServiceEndpoint()服务启动正常(但我无法添加对它的引用,所以我猜还有其他问题):

public class RequestProcessorWindowsService : ServiceBase {
    public ServiceHost serviceHost = null;
    //other methods skipped 
    protected override void OnStart(string[] args)
    {
        if( serviceHost != null ) {
       serviceHost.Close();
        }
        Uri baseAddress = new Uri("http://localhost:8095/RequestProcessorService");
        serviceHost = new ServiceHost( typeof(RequestProcesssorImpl), baseAddress );
        serviceHost.AddServiceEndpoint( typeof(IRequestProcessor), new BasicHttpBinding(), baseAddress );
        serviceHost.Open();
    }
}

为什么通过 App.Config 配置后我的服务无法启动?


配置文件中的服务名称与服务实现类不匹配。

配置文件应包含:

<service name="MyServiceNamespace.RequestProcesssorImpl"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“服务 X 的应用程序端点为零”,除非我在代码中添加端点 - 为什么? 的相关文章

随机推荐