我跟着this MSDN article徹底創建託管在NT服務中的WCF服務。「服務X沒有應用程序端點」,除非我在代碼中添加端點 - 爲什麼?
當我點擊服務控制檯「開始」,然後我看到在事件查看器中以下內容:
服務無法啓動。 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>
所有實體named with their namespaces,所以這不是問題。 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中配置的時候不是我的服務啓動?
您可以發佈相同的OnStart()與錯誤投擲? – 2011-03-11 09:34:38
@Vincent Vancalbergh:完成。 – sharptooth 2011-03-11 09:56:29