7

何百ものダウンロードと変換を一緒に処理するWCFサービスを開発しようとしています。ASP.NETWebアプリケーションからメッセージを受信するトランザクションキューを使用してMSMQを初期化しました。

インターネットに関する長い調査の後の私の質問は、MSMQメッセージを管理するWCFサービスメソッドで長いプロセスを管理する方法です。

問題は、小さいサイズでダウンロードすると、プロセスがすぐに終了し、スコープがMSMQサービスに完全に戻ることです。ただし、ダウンロードサイズが大きく、ダウンロードに3/4分かかる場合は、スコープがまだ完了していますが、 MSMQサービスがMSGをWCFサービスに再送信しましたが、ダウンロードが重複しています。

これはタイムアウトの問題だと思いますが、ホストapp.configをより適切に構成しようとしましたが、成功しませんでした。

      <netMsmqBinding>
    <binding name="OrderServiceMsmqBinding" 
             maxRetryCycles="1"
             receiveRetryCount="1"
             retryCycleDelay="00:05:20"
             deadLetterQueue="System"
             receiveErrorHandling="Move"
             exactlyOnce="true"
             durable="true"
             receiveTimeout="00:10:00"
             sendTimeout="00:20:00"
             timeToLive="1.00:00:00" useMsmqTracing="true">
      <security mode="None"></security>
    </binding>
  </netMsmqBinding>

これは、WCFサービスへのメソッドです。

   <OperationBehavior(TransactionScopeRequired:=True, TransactionAutoComplete:=True)> _
Public Sub FfmpegConversion(ffmpegjob As FfmpegJob) Implements IOrderService.FfmpegConversion
    Using sc As New TransactionScope(TransactionScopeOption.Required)
        Try
          ExecuteLongProcess()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            sc.Complete()
        End Try
    End Using
End Sub

アップデート

長い試行錯誤の末、MSMQキューによって起動されるメソッドに長いプロセスを組み込むことは不可能だと思い始めています。

データを管理する別のスレッドを使用して回避しますが、問題は、ジョブが新しい​​スレッドに渡されると、MSMQがメッセージを削除したため、TransactionScopeの利点が失われることです。

4

1 に答える 1

0

ここで起こっていることは、トランザクションがタイムアウトになることです。machine.config ファイルで新しい値を指定することができ、それが長いトランザクションを取得する方法です...

http://blogs.inkeysolutions.com/2012/01/managing-timeouts-while-using.html

于 2013-09-03T14:12:59.160 に答える