3

Windows サービス ホスティングを使用して WCF サービスをホストしています...現在、サービスを呼び出してもデバッグできません!サービスをデバッグできますか?

4

4 に答える 4

7

さらに、開発中に Windows サービスでホストしないことを検討してください。私がサービスを持っているときはいつでも、サービスのデバッグの詳細に対処する必要がないように、コマンド ライン プログラムとして開始するための代替コード パスがあります (可能であれば /interactive コマンド ライン パラメーターなどを使用します)。アセンブリの交換などを停止します)。

展開などのために「サービス」にのみ目を向けます。デバッグは常に非サービスモードで行われます。

于 2012-04-04T10:56:14.633 に答える
3
  1. VS を管理モードで実行する
  2. [デバッグ] メニューから [プロセスにアタッチ...] を選択します。
  3. サービスプロセスを選択してください
  4. サービスにブレークポイントを設定する
于 2012-04-04T10:54:37.363 に答える
0

ここでウォークスルーを見つけました。OnDebugMode_Start と OnDebugMode_Stop の 2 つのメソッドをサービスに追加する (実際には、OnStart および OnStop 保護メソッドを公開する) ことを提案しているため、Service1 クラスは次のようになります。

public partial class Service1 : ServiceBase
{
    ServiceHost _host;
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        Type serviceType = typeof(MyWcfService.Service1);
        _host = new ServiceHost(serviceType);
        _host.Open();
    }

    protected override void OnStop()
    {
        _host.Close();
    }

    public void OnDebugMode_Start()
    {
         OnStart(null);
    }

     public void OnDebugMode_Stop()
     {
         OnStop();
     }
}

次のようなプログラムで起動します。

static void Main()
{
    try
    {
#if DEBUG
        // Run as interactive exe in debug mode to allow easy debugging. 

        var service = new Service1();
        service.OnDebugMode_Start();
        // Sleep the main thread indefinitely while the service code runs in OnStart() 
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
        service.OnDebugMode_Stop();
#else
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
                           { 
                                     new Service1() 
                           };
        ServiceBase.Run(ServicesToRun);
#endif
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

app.config でサービスを構成します。

<configuration>
<system.serviceModel>
<services>
  <service name="MyWcfService.Service1">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
      contract="MyWcfService.IService1">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
      contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/MyWcfService/Service1/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata  httpGetEnabled="True"  policyVersion="Policy15"/>
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>

これで準備完了です。

于 2015-04-27T11:26:24.090 に答える
0

Debugger.Launch()はいつも私のために働いていました。

于 2012-04-04T11:16:46.533 に答える