0

C# XML Web サービス クラスで、IIS に各クライアント リクエストを別のスレッドで起動させることは可能ですか? eacj を必要とする別のライブラリからいくつかのコードを追加する必要があります。

public class FlightOperationsService : WebService
{
    public string SayHello()
    {
        return (ExternalLibary.RunRequest()); // Must be in separate thread
    }
}

複数のクライアントがアタッチされている場合、各リクエストは個別のスレッドで実行する必要がありますが、IIS または WebService クラスが外部ライブラリで問題を引き起こしている同じスレッドを使用しているようです。

4

2 に答える 2

2

.net4.5 を使用している場合は、asyn/await を実装してみて、これで問題が解決するかどうかを確認してください。それ以外の場合は、System.Threading から新しいスレッドを作成できます。

新しいスレッドを作成すると、サーバー上で多くのリソースが消費されることに注意してください! 大量のクライアント接続がある場合、これは適切ではありません。

于 2013-09-23T08:02:45.110 に答える
0

ThreadPool.QueueUserWorkItem ですが、関数で文字列を直接返す必要があるため、これはシナリオではありません。コードを変更する唯一の方法は、.net 4.5 で await / async を使用することです。それ以外の場合は、async io メソッドを使用する必要があります。つまり、コンテキストを渡し、後でコンテキストに値を入力する必要があります。いう

public IAsyncResult SayHello(AsyncContext context)
{
     // start a new async operation and return the IAsyncResult
}

void RealWork(AsyncContext context)
{
    context.SetValue("some thing");
}

これは単なるプロトタイプであり、実際の言葉ははるかに困難です。サンプルとバイナリは http://procedure.codeplex.com/ で入手できます。プロジェクトの所有者として、申し訳ありませんが、私は自分自身のために広告を作成しました...紹介や追加の提案が必要な場合は、お気軽にメッセージをお送りください。

PS別のスレッドでリクエストを処理する必要があるかどうかは、ネットワーク/ハードディスクIOなど、メモリ/プロセッサ以外の操作があるかどうかによって異なります

于 2013-09-23T08:12:29.693 に答える