Je suis en train d'écrire du code pour télécharger et traiter les pièces jointes des messages électroniques, puis les traiter. Le code fonctionne comme requis dans certains cas, mais a toujours quelques problèmes majeurs.Exchange Web Services La charge de pièces jointes est lente
Chaque fois que le code charge la pièce jointe dans un fichier sur le disque local, il faut un très long temps de le faire et souvent avec l'exception suivante à la suite du téléchargement lent:
A first chance exception of type 'Microsoft.Exchange.WebServices.Data.ServiceRequestException' occurred in Microsoft.Exchange.WebServices.dll
Je peux me tromper, mais si le serveur d'échange en question est sur le même réseau gigabit que le serveur exécutant le code et Outlook a un accès rapide aux e-mails, pièces jointes, etc les pièces jointes devraient télécharger beaucoup plus rapidement et beaucoup plus régulièrement. Voici quelques exemples des temps de téléchargement/chargement:
- 800KB Zip - 1m 4s
- 840KB Zip - 6 m 18s
- 1.33MB Zip - 11m 23s
- 2.78MB Zip - 17m 3s
J'ai essayé de régler le paramètre de délai de connexion EWS à 300000ms au lieu de 100000ms par défaut pour donner plus de temps aux pièces jointes à télécharger et le nombre d'exceptions a légèrement diminué mais le temps d'attente est maintenant trop long.
Le code s'exécute dans les threads, pas plus de 8 à la fois (10 étant la limite d'étranglement pour EWS je crois), mais je ne peux pas imaginer que cela ferait une grande différence. (Cela n'a pas été le cas lorsque j'ai testé des courriels uniques à la fois).
Voici le code fileté qui télécharge les pièces jointes (quelques bits de l'ONU liés supprimés pour simplifier):
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
Comme mentionné précédemment, je suis au courant de l'étranglement d'échange mais ne peut pas trouver quoi que ce soit lié à la vitesse quelles pièces jointes sont téléchargées. Donc, ma question est de savoir ce qui pourrait provoquer des vitesses de téléchargement si lentes?