8

PDFファイルの生成に使用されるWCF Webサービス操作があります。そのためにサードパーティのツール (具体的には Syncfusion) を使用していますが、現時点では交換できない可能性があります。

問題は、サードパーティのツールにはマルチスレッドに問題があり、同時に Web サービスへの複数の呼び出しがある場合に機能しないように見えることです。

lockクリティカル セクションを実行するスレッドを 1 つだけにすることで、問題を解決できます。

Public Class GeneratorController
{
    // object we use for lock
    private static Object thisLock = new Object();

    public void Generate(ref PdfDocument pdfDocument)
    {
        lock (thisLock)
        {
             // critical section
        }
    }
}

私の質問は次のとおりです。それは良い考えですか?Web サービスでそのようなコードを使用すると、何か問題が発生するでしょうか?

ノート

これは Syncfusion に関する質問ではありません。lockこれは、Web サービスでの使用に関する質問です。タグを syncfusion に変更しないでください。

4

3 に答える 3

4

WCF は、サービス オブジェクトの同期呼び出しをサポートしています。必要に応じて、次の 2 つのプロパティを調べることができます。

サードパーティ コンポーネントの複数のインスタンスを起動できず、コンポーネントが同時アクセスを許可しない場合 (最悪の場合)、InstanceContextMode = Single および ConcurrencyMode = Single を指定できます。この場合、WCF は WCF オブジェクトの 1 つのコピーのみをインスタンス化し (これはサード パーティ コンポーネントのラッパーであると想定しています)、一度に 1 つの要求のみが処理されます。リクエストはキューに入れられ、FIFO 方式で処理されます。WCF ランタイムは wcf オブジェクトへの同期アクセスを確実に行うため、wcf サービス内でロックを使用する必要はありません。

于 2013-10-14T18:36:53.987 に答える