Windows サービス ホスティングを使用して WCF サービスをホストしています...現在、サービスを呼び出してもデバッグできません!サービスをデバッグできますか?
質問する
3684 次
4 に答える
7
さらに、開発中に Windows サービスでホストしないことを検討してください。私がサービスを持っているときはいつでも、サービスのデバッグの詳細に対処する必要がないように、コマンド ライン プログラムとして開始するための代替コード パスがあります (可能であれば /interactive コマンド ライン パラメーターなどを使用します)。アセンブリの交換などを停止します)。
展開などのために「サービス」にのみ目を向けます。デバッグは常に非サービスモードで行われます。
于 2012-04-04T10:56:14.633 に答える
3
- VS を管理モードで実行する
- [デバッグ] メニューから [プロセスにアタッチ...] を選択します。
- サービスプロセスを選択してください
- サービスにブレークポイントを設定する
于 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 に答える