0

ac# MVC プロジェクトで、信頼性の低いことで有名な SOAP Web サービスを使用しています。私はそのサービスを制御できません。場合によっては、長時間応答しなくなることがあります。クライアント側から、サービスから応答を受け取るまで、設定された間隔でメッセージの送信を再試行し続ける簡単な方法はありますか?

私は MSMQ と ws-reliability を見てきましたが、どちらのオプションも Web サービスをある程度制御する必要があるようです。クライアント側からこれを行うのに役立つものはありますか?

4

2 に答える 2

3

すでにお気づきかもしれませんが、あなたの問題は多くの人にとって大きな問題です。「べき等」と「webservice」を調べてください。冪等性とは、要求/応答を保証できるということだけではありませんが、検索を行うと、読むべき多くの優れた情報が得られます。

「長時間応答を停止する」というのが、めったに呼び出されない数秒を意味する場合、DarkWanderer はそのような問題に対するかなり力ずくの解決策を示しました。

しかし、多くの呼び出しがある場合、スリープは作業スレッドを食い尽くす可能性があるため、何らかのキューに依存する必要があります。

呼び出しが非トランザクションで重要でない場合は、独自のキューイング メカニズムをコーディングできます。これは簡単に思えるかもしれませんが、スレッド化、複雑なコールバック、ロギング、アクティブなエラー処理などが必要になる場合があります。多くの可哀想な魂は、単純な解決策として始まったものがメンテナンスの悪夢に変わったと報告しています。

そして今、あなたの要件の 1 つは、アプリ プールのリサイクルに耐えなければならないということであることがわかりました。次に、クリティカル (およびおそらくトランザクション) キューイングの最後のカテゴリに入ります。

最初から MSMQ をお勧めする理由。それはすべての問題を処理し、API は .net にあり、最近は非常に優れています。はい、ソリューション全体に複雑さが加わりますが、それは問題のドメインに起因します。

于 2013-01-24T21:38:31.007 に答える
1
while (true) {
    try {
        var response = webServiceClient.CallMethod();
        if (response.Successful())
            break;
        Sleep(retryInterval);
    } catch {}
}

つまり、Web サービスを呼び出し続けるだけでよく、メッセージ キューなどは必要ありません。それはあなたの質問に答えていますか?

于 2013-01-24T21:07:42.680 に答える