2012-04-10 17 views
2

電子メールメッセージの添付ファイルをダウンロードして処理してから処理するコードを記述しています。このコードは、必要に応じて機能していますが、依然として大きな問題を抱えています。Exchange Webサービス添付ファイルの読み込み速度が遅い

コードは、ローカルディスク上のファイルに添付ファイルをロードするたびに、それが遅いのダウンロードの結果として、以下の例外を除いてそれほど多くの場合、タイムアウトに行うには非常に長い時間がかかる:

A first chance exception of type 'Microsoft.Exchange.WebServices.Data.ServiceRequestException' occurred in Microsoft.Exchange.WebServices.dll 

私は間違っているかもしれませんが、問題の交換サーバーがコードを実行しているサーバーと同じギガビットネットワーク上にある場合、Outlookは電子メール、添付ファイルなどへの高速アクセスがあります。添付ファイルは、はるかに高速にダウンロードする必要があります。 1メートル4S

  • 840キロバイトジップ - - 6メートル18S
  • 1.33メガバイトジップ - 11メートルの23S
  • 2.78メガバイトジップ - 17メートル3S
    • 800キロバイト郵便番号:ここでは、ダウンロード/ロード時間のいくつかの例であり、

      添付ファイルをダウンロードする時間が長くなるため、EWS接続のタイムアウト設定をデフォルトの100000msではなく300000msに設定してみましたが、例外の数はわずかに減少しましたが、待ち時間が長くなりすぎました。

      コードはスレッド単位で実行されますが、一度に8つ以上(EWSのスロットリング制限は10であると考えています)ですが、違いが大きいと想像できません。 (私が一度に1つの電子メールをテストしていたときは、これは完了していません)。前述したように絞る取引所の意識をイム、

       Dim strMessageFolder As String 
      
           ' Prepare the directory where this emails attachments will be stored 
           strMessageFolder = g_strFolder_Temp & strMessageID & "\" 
      
           ' Create a folder to store the attachments for this email 
           Call FileSystem_CreateFolder(strMessageFolder, True) 
      
           ' Process the emails attachments 
           For Each emailAttachment In emailMessage.Attachments 
            Dim fileattach As FileAttachment 
            'Dim fileattachStream As FileStream 
            Dim strAttachmentFile As String 
      
            ' Prepare for the downloading of the attachment 
            fileattach = emailAttachment 
            blnTryFailed = False 
            intAttempts = 0 
            strAttachmentFile = strMessageFolder & fileattach.Name 
      
            ' Handle up to 3 download attempts 
            Do 
             Try 
              ' Try to download the attachment - Method 1 
              fileattach.Load(strAttachmentFile) 
      
              ' Try to download the attachment - Method 2 
              'fileattachStream = New FileStream(strAttachmentFile, FileMode.OpenOrCreate, FileAccess.ReadWrite) 
              'fileattach.Load(fileattachStream) 
              'fileattachStream.Close() 
              'fileattachStream.Dispose() 
      
              blnTryFailed = False 
      
             Catch ex As Exception 
              blnTryFailed = True 
      
              ' Ensure the failed download is deleted 
              Call FileSystem_DeleteFile(strAttachmentFile) 
      
              intAttempts += 1 
      
             End Try 
      
            Loop While blnTryFailed And intAttempts < 3 
      
            ' If the attachment download was unsuccessful then we cannot process the current email 
            If blnTryFailed = True Then 
             emailMessage.IsRead = False 
             'message.Subject = message.Subject & " - Attachment download failed, skipped" 
             Try 
              emailMessage.Update(ConflictResolutionMode.AutoResolve) 
             Catch ex As Exception 
              Call Logging_Add("Unable to mark email as skipped", strMessageID, "Debug") 
             End Try 
             Exit Sub 
            End If 
      

      が、速度に関連する何かを見つけることができません。ここで

      は、添付ファイル(単純化のために削除いくつかの非関連ビット)をダウンロードスレッドコードであります添付ファイルがダウンロードされます。 私の質問は、このような遅いダウンロード速度の原因となる可能性がありますか?

    答えて

    1

    私のアプリでも同じ問題があります。この問題は、EWSとアプリケーション間のすべてのHttpRequestおよびHttpResponseメッセージをコンソールに書き込むデフォルトのEWS設定によって発生していました。 TraceFlagsをオフにすることは祝福でした。 C#のコード:

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 
    service.TraceFlags = TraceFlags.None;