Windowsサービスがホストするwcfサービスがあります。 Windowsサービスは、USBドライブ(取り外しと挿入を待機します。 今、私はそれについてクライアントに通知します。WindowsサービスのホストWCF:Windowsサービスからのクライアントへのコールバック
私はその後、呼び出すWindowsサービス最初 からWCFサービスの静的メソッドを呼び出そうとしていますコールバックメソッドを経由して
OperationContext.Current.GetCallbackChannel<ICallback>()
しかしOperationContext.Currentは常にnullである私が間違っているスレッド/コンテキストにいるよようです。
は、WCFでそれを登録し、その後、WCFサービスで静的なイベントを宣言しようとしましたwcf servicのWindowsサービスから静的メソッドを呼び出したイベントが発生した場合:
//WCF Service
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WCFService : IService
{
public static event EventHandler<EventArgs> StatusChanged;
public Service()
{
StatusChanged += OnStatusChanged;
}
private void OnStatusChanged(object sender, EventArgs eventArgs)
{
// still not in the correct thread here?
// OperationContext.Current is null
OperationContext.Current.GetCallbackChannel<ILocalLicenceBackendServiceCallback>().ServiceStateChanged();
}
public static void ChangeStatus()
{
if (StatusChanged != null)
StatusChanged(null,EventArgs.Empty);
}
}
//Windows Service
public partial class WindowsService : ServiceBase
{
private void OnStatusChanged()
{
WCFService.ChangeStatus();
}
}
..まだ動作していません。それでは、Windowsサービスからクライアントにwcfコールバックを使って情報を渡すには、どうすればいいのでしょうか。
サービスへのクライアント呼び出しであったサービス操作( 'OperationContext.Current'はnullではなく、サービス操作内でのみ)内でのみコールバックできます。あなたの 'OnStatusChanged'イベントハンドラは、WCFサービス操作のコンテキストでは実行されません。すでに他の "publish subscribe wcf"の記事を調べていますか?そこにはたくさんの情報があります。 –