2016-06-16 21 views
0

Pro MSDN-Dokumente zu Kontaktfotos Folgendes ist zu vage Ich würde mich freuen, wenn jemand, der mit dem Thema vertraut ist, mehr Einblick in das richtige Caching geben kann.Zwischenspeichern von Benutzerfotos in Exchange-Webdiensten

Hier ist mein Code so weit ...

https://msdn.microsoft.com/en-us/library/office/jj190905(v=exchg.150).aspx#bk_EWSMA

Caching Benutzer Fotos

Austausch gibt die Daten mit dem Inhaltstyp image/jpeg, zusammen mit einer Sammlung von Kopfzeilenwerten. Der ETag-Header ähnelt einem Änderungsschlüssel. Der Wert ist eine Zeichenfolge, die angibt, wann das Foto zuletzt aktualisiert wurde. Der ETag bleibt für das Benutzerfoto gleich, bis das Foto geändert wird. Sie können diesen ETag-Wert in der HTTPS-GET-Anforderung in einem If-None-Match-Header an den Server senden. Wenn sich das Foto seit der letzten Anfrage nicht geändert hat, antwortet der Server mit einer HTTP 304-Antwort, die dies anzeigt. Dies bedeutet, dass Sie das Benutzerfoto, das Sie zuvor angefordert und gespeichert haben, verwenden können, anstatt ein neues zu bearbeiten.

Dim oPictureRequest As HttpWebRequest 
    Dim strHttpPhotoEndPoint As String = pExchangeContact.Service.Url.ToString & "/s/GetUserPhoto?email=" & pExchangeContact.Service.ImpersonatedUserId.Id & "&size=HR240x240" 
    Dim strPictureFilePath As String = config.PrivateContactPicturesPath & "/" & pEmployeeId.ToString & "/" & pCRMContact.ContactId.ToString & ".jpg" 
    Dim oCachePolicy As New HttpRequestCachePolicy(HttpRequestCacheLevel.Revalidate) 

    If pExchangeContact.HasPicture Then 
     oPictureRequest = DirectCast(WebRequest.Create(strHttpPhotoEndPoint), HttpWebRequest) 
     oPictureRequest.CachePolicy = oCachePolicy 
     Using oPictureResponse As HttpWebResponse = DirectCast(oPictureRequest.GetResponse(), HttpWebResponse) 
      If oPictureResponse.StatusCode = HttpStatusCode.OK Then 
       Dim oPicture As Bitmap = New Bitmap(oPictureResponse.GetResponseStream()) 
       oPicture.Save(strPictureFilePath) 
      End If 
     End Using 

    End If 

Antwort

2

Es sieht aus wie Sie bereits mit dem EWS Managed API, wenn Sie die neueste Version von Github bekommen https://github.com/OfficeDev/ews-managed-api dann können Sie den SOAP-Operation verwenden und die Managed-API hat Code die Header zB

zu handhaben
 String ETag = ""; 
     GetUserPhotoResults grPhoto = service.GetUserPhoto("[email protected]", "HR240x240", ETag); 
     if (grPhoto.Status == GetUserPhotoStatus.PhotoReturned) 
     { 
      ETag = grPhoto.EntityTag; 
     } 
     grPhoto = service.GetUserPhoto("[email protected]", "HR240x240", ETag); 
     switch (grPhoto.Status) 
     { 
      case GetUserPhotoStatus.PhotoReturned: ETag = grPhoto.EntityTag; 
       break; 
      case GetUserPhotoStatus.PhotoUnchanged: 
       Console.WriteLine("Photo Unchanged"); 
       break; 
     } 
+0

Danke Ich verwende die neueste Managed API-Version und Intlisense wird GetUserPhotoResults nicht automatisch vervollständigen muss ich einen bestimmten Namespace importieren? – rojobo

+1

Nein ist unter Microsoft.Exchange.WebService.Data zB die Klasse https://github.com/OfficeDev/ews-managed-api/blob/154dbc66ac018d861c73ce489839cd9f58a1b0cd/Search/GetUserPhotoResults.cs. Beachten Sie, dass Sie von gitHub kompilieren müssen, dass die Microsoft/nuget-Version diese Änderungen nicht enthält. –

+0

thnaks, um das Problem mit dem nugget-Paket anzugehen – rojobo