2010-07-31 5 views
0

J'essaie de configurer les notifications push EWS dans mon application C#.Comment envoyer une réponse OK à EWS

Après avoir reçu la réponse du serveur et l'avoir lue à l'aide d'un NetworkStream, je dois répondre au serveur avec Ok dans un message SOAP. Le seul exemple que je peux trouver utilise Microsoft.Web.Services3 et un SoapEnvelope. Ma compréhension est que cela a maintenant été remplacé par WCF et je veux vraiment utiliser les nouvelles technologies (pour les apprendre).

Comment retourner un message SOAP sur le serveur, probablement en utilisant le même NetworkStream sur lequel je reçois la notification?

Voici un code que j'ai essayé, mais il échoue pour une raison quelconque.

const string RESPONSE_OK = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope\"><soap:Body>" + 
       "<SendNotificationResult xmlns=\"http://schemas.microsoft.com/exchange/services/2006/messages\">" + 
       "<SubscriptionStatus>OK</SubscriptionStatus></SendNotificationResult></soap:Body></soap:Envelope>"; 

responseBytes = encoding.GetBytes(RESPONSE_OK); 

      // Send the result 
      HTTPResponseStruct _httpResponse; 
      _httpResponse.version = "HTTP/1.1"; 
      _httpResponse.BodyData = responseBytes; 

      _httpResponse.Headers = new Hashtable(); 
      _httpResponse.Headers.Add("Server", "IT12"); 
      _httpResponse.Headers.Add("Date", DateTime.Now.ToString("r")); 
      _httpResponse.Headers.Add("Content-Type", "text/xml; charset=utf-8"); 
      _httpResponse.Headers.Add("Content-Length", _httpResponse.BodyData.Length); 
      _httpResponse.Headers.Add("Connection", "close"); 


      string HeadersString = _httpResponse.version + " " 
       + "200 OK" + "\r\n"; 

      foreach (DictionaryEntry Header in _httpResponse.Headers) 
      { 
       HeadersString += Header.Key + ": " + Header.Value + "\r\n"; 
      } 

      HeadersString += "\r\n"; 

      byte[] bHeadersString = Encoding.ASCII.GetBytes(HeadersString); 

      // Send headers 
      clientStream.Write(bHeadersString, 0, bHeadersString.Length); 


      // Send body 
      if (_httpResponse.BodyData != null) 
       clientStream.Write(_httpResponse.BodyData, 0, 
         _httpResponse.BodyData.Length); 
      // clientStream.Write(responseBytes, 0, responseBytes.Length); 
      clientStream.Flush(); 

Merci, Pieter

+0

Vous avez oublié de mentionner quoi que ce soit à propos de l'échec. Incluez les types d'exception, les messages d'erreur ou décrivez le comportement inattendu. – Timwi

+0

EWS m'avise d'un changement, alors je suis supposé le faire savoir que j'ai reçu la notification. Si ce n'est pas le cas, il va essayer à nouveau dans 30, puis 1 min et continuer à doubler le temps jusqu'à ce qu'il atteigne l'heure spécifiée dans mon abonnement (5 minutes), puis me désabonner automatiquement. Il n'y a pas d'exceptions, juste quelques notifications de plus jusqu'à ce que ça s'arrête. – Pieter

+0

avez-vous réussi à le faire fonctionner? –

Répondre

1

Vous avez marqué l'autre réponse que "acceptée" mais le lien auquel vous faites référence concerne les abonnements en streaming. Ceux-ci sont uniquement disponibles pour Exchange 2010 et versions ultérieures. Pour ceux qui sont bloqués avec Exchange Server 2007, il y a un Push-Notification library sur CodePlex.

Questions connexes