EWS streaming notifications not received after a while

I have a strange problem with streaming events in EWS.

I have subscribed to a group of mailboxes using required cookies as stated here: https://msdn.microsoft.com/en-us/library/office/dn458789(v=exchg.150).aspx

After receiving notifications for some time, they suddenly stop to arrive (usually 40 minutes - 1 hour later) I tried to debug it with the EWS trace and noticed that the "heartbeat" messages that the exchange server is periodically sent out are no longer accepted and example of this post:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<soap11:Header xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/">
  <ServerVersionInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="15" MinorVersion="1" MajorBuildNumber="1178" MinorBuildNumber="21" Version="V2017_04_14" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" />
</soap11:Header>
<soap11:Body xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/">
  <m:GetStreamingEventsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
    <m:ResponseMessages>
      <m:GetStreamingEventsResponseMessage ResponseClass="Success">
        <m:ResponseCode>NoError</m:ResponseCode>
        <m:ConnectionStatus>OK</m:ConnectionStatus>
      </m:GetStreamingEventsResponseMessage>
    </m:ResponseMessages>
  </m:GetStreamingEventsResponse>
</soap11:Body>

      

I set the OnDisconnect event to reopen the connection on timeout and saw that it works, so I guess it is not a timeout issue.

Does anyone have a hint as to why the messages stop arriving?

Lost your subscription? should I correspond? (I have not found any link to this problem)

this is my code:

`static void ListenerFunciton()
{
// Set the exchange service
ExchangeService service = null;
service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
service.Credentials = new WebCredentials(ServiceAccount, ServicePassowrd);
System.Net.ServicePointManager.ServerCertificateValidationCallback =
 delegate (Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
 {
     return true;
 };

 string anchorMailbox = "blabla@domain.onmicrosoft.com"
 StreamingSubscription subsribption = null;

 //Set the coockies
 service.HttpHeaders.Add("X-AnchorMailbox", anchorMailbox);
 service.HttpHeaders.Add("X-PreferServerAffinity", "true");

 // Set the impersonation
 service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, anchorMailbox);

 subsribption = service.SubscribeToStreamingNotifications(new FolderId[] { WellKnownFolderName.Inbox }, EventType.NewMail);

 int index = service.HttpResponseHeaders["Set-Cookie"].IndexOf("X-BackEndOverrideCookie");
 string coockie = service.HttpResponseHeaders["Set-Cookie"].Substring(index).Split(';')[0];
 service.HttpHeaders.Add("Cookie", coockie);

 StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 29);
 connection.AddSubscription(subsribption);
 connection.OnNotificationEvent += OnNotificationEvent;
 connection.OnDisconnect += OnDisconnect;
 connection.Open();
 while(true)
 {

 }

}

static private void OnDisconnect(object sender, SubscriptionErrorEventArgs args)
{
    Console.WriteLine("\n\n\n\nFrom now this is the reconnection\n\n\n\n");
    //cast the sender object
    StreamingSubscriptionConnection connection = (StreamingSubscriptionConnection)sender;
    //reconnect
    connection.Open();

}

static private  void OnNotificationEvent(object sender, NotificationEventArgs args)
{
    file.WriteLine(DateTime.Now.ToString() + " || Got notification");
    file.Flush();
    foreach (NotificationEvent notification in args.Events)
    {
        file.WriteLine("From Subscription: "+args.Subscription.Id+" Event: "+notification.EventType.ToString("D"));
        file.Flush();
    }
    file.WriteLine("\n\n");
}`

      

+3


source to share





All Articles