2011-06-29 148 views
0

我試着託管一個WCF圖書館服務與Windows服務項目,我安裝了服務,但是,當我啓動service.msc服務,服務啓動和立即關閉。繼顯示的消息之後:Windows服務託管一個WCF服務立即關閉

本地的Servicel服務 計算機已啓動,然後停止。 如果 某些服務未被其他服務 或程序使用,某些服務會自動停止。

App.config文件WCF和Windows服務項目是相同的,其計算方法如下:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 
    <services> 
     <service name="WorkMateWCF.Service1"> 
     <endpoint address="" binding="netTcpBinding" bindingConfiguration="" 
      contract="WorkMateWCF.IService1"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8523/WorkMate1" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 

整個項目/解決方案是可以在這裏下載:https://skydrive.live.com/?cid=d358d316fa2c3a37&sc=documents&uc=1&id=D358D316FA2C3A37%21135#

可否請你指導我關於如何進一步進行。謝謝。

附加信息: 以下是windows service項目中service1.cs文件的代碼。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.ServiceProcess; 
using System.Text; 
using System.ServiceModel; 
using WorkMateWCF; 

namespace WorkMateWinService 
{ 
    public partial class Service1 : ServiceBase 
    { 
     internal static ServiceHost MyServiceHost = null; 

     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      if (MyServiceHost != null) 
      { 
       MyServiceHost.Close(); 
      } 
      MyServiceHost=new ServiceHost(typeof(Service1)); 
      MyServiceHost.Open(); 
     } 

     protected override void OnStop() 
     { 
      if (MyServiceHost != null) 
      { 
       MyServiceHost.Close(); 
       MyServiceHost = null; 
      } 
     } 
    } 
} 
+0

您需要在您的帖子中提供有關此問題的更多信息,而不是依賴可下載的項目。問題及其答案應該對所有人都有益。 –

+0

可否請你告訴我需要更多的信息,因爲我認爲我提到了這個問題,我是新來的編碼,請讓我知道什麼是更多的信息是必需的。謝謝。 – surpavan

+1

一個好的開始是在服務的Start方法中顯示代碼。任何其他可能相關的信息都是值得歡迎的。 –

回答

0

得到了問題,當我回顧我的事件日誌,我發現這一點:

"Service cannot be started. System.InvalidOperationException: The HttpGetEnabled property of ServiceMetadataBehavior is set to true and the HttpGetUrl property is a relative address, but there is no http base address. Either supply an http base address or set HttpGetUrl to an absolute address. 
    at System.ServiceModel.Description.ServiceMetadataBehavior.EnsureGetDispatcher(ServiceHostBase host, ServiceMetadataExtension mex, Uri url, String scheme) 
    at System.ServiceModel.Description.ServiceMetadataBehavior.CreateHttpGetEndpoints(ServiceDescription description, ServiceHostBase host, ServiceMetadataExtension mex) 
    at System.ServiceModel.Description.ServiceMetadataBehavior.ApplyBehavior(ServiceDescription description, ServiceHostBase host) 
    at System.ServiceModel.Description.ServiceMetadataBehavior.System.ServiceModel.Description.IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase) 
    at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescript..." 

然後徹底審查後,問題是,我沒有HTTPSGETENABLED假只有一個,事實上有兩種,使後另一個的變化,應用程序開始像魅力工作。

我特

1

我發現了什麼非常混亂(也可能是.NET運行時,太)是事實,你的Windows服務被稱爲Service1,而WCF服務被稱爲Service1(沒有命名空間或任何東西) 。

那麼這兩個Service1類類型中的哪一個將在這裏使用???

MyServiceHost = new ServiceHost(typeof(Service1)); 

我不知道 - 我恐怕這將是錯誤類(在Windows NT服務類)。

你應該給你的東西更有意義的名字,並保持這些東西分開(按名稱)!

+0

謝謝marc_s,我想在這種情況下運行wcf。你能告訴我怎麼做這個改變。非常感謝讓我理解錯誤。我試圖從http://msdn.microsoft.com/en-us/library/ff649818執行。aspx,我不擅長c# – surpavan

+1

@surpavan:只需將WCF服務類重命名爲MyWCFService,然後使用MyServiceHost = new ServiceHost(typeof(MyWCFService));'。這樣,你有兩個不同的名字 - 'Service1'是你的主機,NT服務,而'MyWCFService'是WCF服務(顧名思義) –

+0

我很抱歉說我無法做到這一點,這對我來說很讓人困惑,你能否做出這樣的改變並給我一些文件/文件,以便我能比較和理解它在哪裏或者它是什麼。感謝一切,直到現在。 – surpavan