Ich bin gerade dabei, Code zum Herunterladen und Verarbeiten der Anhänge von E-Mail-Nachrichten zu schreiben und diese dann zu verarbeiten. Der Code funktioniert in einigen Fällen wie erforderlich, weist jedoch weiterhin einige schwerwiegende Probleme auf. Exchange-Webdienste Anhangslast ist langsam
Jedes Mal, wenn der Code die Anlage in eine Datei auf der lokalen Festplatte lädt, dauert es eine sehr lange Zeit so und oft aus mit folgenden Ausnahme als Folge des langsamen Download zu tun:
A first chance exception of type 'Microsoft.Exchange.WebServices.Data.ServiceRequestException' occurred in Microsoft.Exchange.WebServices.dll
Ich mag mich irren, aber wenn sich der betreffende Exchange-Server im selben Gigabit-Netzwerk befindet wie der Server, auf dem der Code ausgeführt wird, und Outlook schnell auf E-Mails, Anhänge usw. zugreifen kann, sollten Anhänge erheblich schneller heruntergeladen werden als sie und viel konsistenter. Hier sind einige Beispiel-Download/Ladezeiten:
- 800KB Zip - 1m 4s
- 840KB Zip - 6m 18s
- 1.33MB Zip - 11m 23s
- 2.78MB Zip - 17m 3s
Ich habe versucht, die Einstellung der EWS-Verbindungszeit auf 300000ms anstelle der Standard 100000ms einzustellen, um den Anhängen mehr Zeit zum Herunterladen zu geben und die Anzahl der Ausnahmen ist leicht gesunken, aber die Wartezeit ist jetzt viel zu lang.
Der Code läuft in Threads, nicht mehr als 8 zu einer Zeit (10 ist die Drosselungsgrenze für EWS glaube ich), aber ich kann mir nicht vorstellen, dass das einen großen Unterschied machen würde. (Es hat nicht getan, wenn ich einzelne E-Mails gleichzeitig getestet habe). Hier
ist der Gewinde-Code, der die Anlagen herunterlädt (einige un-bezogenen Bits der Einfachheit halber entfernt):
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
Wie bereits erwähnt, im, sich der Exchange-Drosselung kann aber nichts mit der Geschwindigkeit im Zusammenhang finden bei welche Anhänge heruntergeladen werden. Also meine Frage ist, was könnte solche langsamen Download-Geschwindigkeiten verursachen?