ゲスト実行可能ファイルとしてサービスを確実に実行できます。 1つのノードが設定することによって行うことが可能になっていてください、それが唯一のインスタンスがそうのように、マニフェストに1までカウント動作します、あなたが実際にそれを移行することができ、
<Parameters>
<Parameter Name="GuestService_InstanceCount" DefaultValue="-1" />
</Parameters>
...
<DefaultServices>
<Service Name="GuestService">
<StatelessService ServiceTypeName="GuestServiceType"
InstanceCount="[GuestService_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
するか、SFではないだけで、再ホストに環境が...
あなたのWindowsサービスは.NETで書かれている場合、あなたはサービスファブリックの恩恵を受けるためにwan't [サービスファブリックで信頼性の高いサービスをWindowsサービスからコードを移行する作業はすべきではありません大きくなる。
基本的なサービスの例:
を使用すると、サービスファブリックアプリケーションでステートレスサービスを作成することから始めた場合は(コメントは削除)のように見えるサービスの実装で終わる: 内部シールクラスのMigratedService:StatelessService { 公共MigratedService(StatelessServiceContextコンテキスト) :ベース(コンテキスト) {}
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new ServiceInstanceListener[0];
}
protected override async Task RunAsync(CancellationToken cancellationToken)
{
// TODO: Replace the following sample code with your own logic
// or remove this RunAsync override if it's not needed in your service.
long iterations = 0;
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
ServiceEventSource.Current.ServiceMessage(this.Context, "Working-{0}", ++iterations);
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
RunAsync
方法は、サービスが起動しているとすぐに実行を開始クラスタ内のノード上で実行されます。クラスタが何らかの理由でサービスを停止するか、別のノードに移動することになるまで、クラスタは実行を継続します。
Windowsサービスコードには、開始時に実行されるメソッドが必要です。
protected override void OnStart(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 60000; // 60 seconds
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
timer.Start();
}
public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
...
DoServiceStuff();
Console.WriteLine("Windows Service says hello");
}
今OnTimer
でそのコードをつかむと、あなたのRunAsync
方法でそれを置く(および他のコードが必要):あなたが継続的に何かをやって起動するTimer
または類似の設定ここでは通常、
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
DoServiceStuff();
ServiceEventSource.Current.ServiceMessage(this.Context,
"Reliable Service says hello");
await Task.Delay(TimeSpan.FromSeconds(60), cancellationToken);
}
}
はTask.Delay(...)
に注意してください、それはTimer
だために、あなたのWindowsサービスが持っていたとして、それが同じ間隔に設定する必要があります。
Windowsサービスにログインしていて、ETWを使用している場合は、そのまま使用できます。たとえば、ログ分析(https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-service-fabric)を使用するなど、Azureからこれらのログを見る方法を設定するだけです。
シャットダウン時に継続して特定のコードを実行し、起動時にサービスに送信されるパラメータ(データベースへの接続文字列など)がある場合は、移行する必要があるかもしれません。サービスの構成設定に変換する必要がある場合は、開始点としてSO 33928204を参照してください。
サービスのインスタンス数を1に指定できます。これも読んでください:http://stackoverflow.com/a/39786939/5946937 – LoekD