0

クライアントに埋め込まれた OEM ソフトウェアにデータを公開するために、クライアント アプリケーションでサービスをホストする必要があります。

どのスレッド オプションを使用できますか? 現時点では、次のようなものを使用しています。

var host = new ServiceHost(...);
var serviceThread = new System.Threading.Thread(host.Open);
serviceThread.Start();

私が抱えている問題は、serviceThread.Start() を呼び出した後、サービスが実行されているかどうかを確認したいのですが、サービスが開始または失敗するまでにさまざまな時間がかかります。

Thread.Sleep(x) の使用は正しくないようです。代替手段は何ですか?

ありがとう。

[編集]

maralfol の提案を試した後、サービスがタイムアウトするまでメインスレッドがハイジャックされるという奇妙な動作が発生しています。

コード:

host = new ServiceHost(typeof(XmlCacheService), new Uri(baseAddress));

host.AddServiceEndpoint(typeof(IXmlDataService), new WebHttpBinding(), string.Empty)
  .Behaviors.Add(new WebHttpBehavior());

try { xmlServiceHost.Open(); }
catch (AddressAccessDeniedException)
{
  CreateRegisterDashboardServiceFile();
  this.ShowUserInfoMessage("The dashboard service needs to be registered. Please contact support.");
}


[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
public class XmlCacheService : IXmlDataService
{
}

[ServiceContract]
public interface IXmlDataService
{
  [WebInvoke(Method = "POST")]
  Stream GetXmlData(Stream messageBody);
}
4

4 に答える 4

0

TPL を使用して、タスクが完了するのを待って、サービスが実行されているかどうかを確認できます。

var task = Task.Factory.StartNew(() =>
                                  {
                                      _host = new ServiceHost(typeof (MyService));
                                      _host.Open();
                                  };
        task.Wait();
        CheckHostIsAvailable();

それが役に立てば幸い!

于 2012-10-17T14:29:57.330 に答える