スレッドでバックグラウンドでプロキシを開こうとしていますが、スレッドはプロキシの新しいインスタンスを作成し、サービスのメソッドを呼び出し、サービスを破棄します。スレッドで複数のサービスを開始する
このすべてがスレッド上で起こる:
var background = new Thread(() =>
{
var proxy = new AssignmentSvcProxy(new EndpointAddress(worker.Address));
try
{
proxy.Channel.StartWork(workload);
proxy.Dispose();
}
catch (EndpointNotFoundException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (CommunicationException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (TimeoutException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (Exception ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
}) { IsBackground = true };
background.Start();
私はCloseTimeoutこのため、最大、です。OpenTimeout、ReceiveTimeoutという、SendTimeoutにタイムアウトを設定しているにもかかわらず起こって断続的にタイムアウトの問題を見ておきます。
私はちょうどこれが問題ではないことを賢明に考えています。すなわち、スレッド上でサービスを開き、それを廃棄することです。
EDIT:
プロキシは、内部でスレッドごとに異なるエンドポイントにカスタムバインディングを持つチャネルを確立します。
それはあなたが、例えば、私は「プロキシ」(あるいは「クライアント」)を期待する「サービス」について話すことに少し混乱だが"スレッドはサービスを開きます" "スレッドは私のサービスのためのプロキシを開く"でなければなりません。 – Jeroen
申し訳ありませんが、質問を更新しましたので、基本的に私のサービスは既に開いていますが、プロキシは単にproxy.Channel.StartWork(ワークロード)を呼び出します。その特定のサービス(すでに自己ホストされています)の意味がわかりますか? –
あなたのtry-catch句に 'finally'を追加したいかもしれません。例外がスローされても最後にコードを実行します。あなたの問題に関しては、私は不確実です。私はまた、あなたのバインディングをコンストラクタに渡すことが賢明かもしれないと信じています。これがタイムアウト例外の原因になっている可能性があります。 –