2

異なる Web サービスを呼び出す複数のタスクをスケジュールするアプリケーションがあります。いくつかは同じ Web サービスですが、異なるメソッドです。各タスクは一定の間隔で実行され、各タスクは独自のスレッドで実行されます。Web サービスへの参照を取得するために、各タスク内でインスタンス化され、常に破棄される wsdl.exe 生成プロキシ クラスがあります。ただし、アプリケーションを実行している場合、タスクは実際にはサービス要求で互いに待機しています。Web サービスは、タスク x からの要求を処理する前に、タスク y からのサービス要求を処理しません (タスク x からのサービス呼び出しに時間がかかる場合があるため、これを見ることができます)。 5 分、タスク y は 100 ミリ秒ですが、x の実行中に y が開始されている場合は、x が完了してから 100 ミリ秒後に終了します)。

これはタスクのコードです (独自のスレッド内で実行されます):

public class TaskX : TaskWrapper
{
    public TaskX(Guid id, string name, EventQueue eventqueue)
        : base(id, name, eventqueue)
    {
    }

    protected override void DoTask()
    {

        try
        {
            var factory = new ServiceReferenceFactory();
            using (var reference = factory.GetServiceReference())
            {

                bool result;
                bool isSpecified;

                reference.Run(out result, out isSpecified);
            }
        }
    }
}

これは、上記のファクトリ メソッドのコードです。

public ProxyClassService GetServiceReference()
    {
                    var refer = new ProxyClassServiceNamespace.ProxyClassService();
                    refer.Timeout = 1000 * 60 * 60;

                    return refer;
    }

なぜ私がこの行動を経験しているのか誰にも分かりますか?

編集:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] を wcf サービスの実装に追加した後のタスクのログを次に示します。Visual Studio 2008 で作成された wcf サービスの構成を変更しませんでした。

15:02 - タスク開始: TaskXWithInternalException

15:02 - タスク開始: TaskYQuickOne

15:02 - タスク終了: TaskYQuickOne タスク経過時間: 00:00:00.1214762

15:02 - タスク開始: TaskZSlowOne

15:03 - タスク開始: TaskXWithInternalException

15:03 - タスク開始: TaskYQuickOne

15:05 - タスク終了: TaskZSlowOne タスク経過時間: 00:03:11.6510947

15:05 - タスク終了: TaskYQuickOne タスク経過時間: 00:02:09.7311905

15:06 - タスク開始: TaskYQuickOne

15:06 - タスク終了: TaskYQuickOne タスク経過時間: 00:00:00.0546980

4

1 に答える 1

2

これはおそらく、WCF サービスの同時実行/インスタンス化の設定に関係しています。

すべての呼び出しが同じサービス インスタンス (例: ) に送信される場合、通常、 を に設定しInstanceContextMode = PerSession or Singleていることを確認する必要があります。そうしないと、呼び出しはシリアル化された方法で処理されます。ConcurrencyModeMultiple

WCF サービス (クライアントではない) のセットアップ方法について詳しく教えてください。

于 2011-05-13T12:20:19.343 に答える