Lots of DefaultPushMessenger log errors in multi-server environment

Vote:
 

Hi

After upgrading to the latest nugets I noticed lots of errors in the server logs. The errors occur only in multi-server environment: when user modifies content on SERVER1, the error is logged on SERVER2.

Nugets:
EPiServer.CMS.Core 9.9.0
EPiServer.CMS.UI 9.5.0
EPiServer.CMS.UI.Core 9.5.0

The exception follows:

2016-05-13 00:07:49,740 ERROR EPiServer.Events.Providers.EventProvider: Exception occured while raising MessageReceived for message '3' from 'XXXWEB02'
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type EPiServer.Shell.UI.Messaging.Internal.PushMessage. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'Topic', line 1, position 9.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at EPiServer.Shell.UI.Messaging.Internal.DefaultPushMessenger.EventRaised(Object sender, EventNotificationEventArgs e)
   at EPiServer.Events.Clients.Event.<>c__DisplayClass38_0.b__0()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at EPiServer.Events.Clients.Event.Raise(Guid raiserId, Object param, EventRaiseOption raiseOption)
   at EPiServer.Events.Clients.Event.RemoteEventReceived(Object sender, EventReceivedEventArgs e)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at EPiServer.Events.Providers.EventProviderService.OnEventReceived(Object sender, EventReceivedEventArgs e)
   --- End of inner exception stack trace ---
   at EPiServer.Events.Providers.EventProviderService.OnEventReceived(Object sender, EventReceivedEventArgs e)
   at EPiServer.Events.Providers.EventProviderService.Provider_OnMessageReceived(Object sender, EventMessageEventArgs e)
   at EPiServer.Events.Providers.EventProvider.OnMessageReceived(EventMessageEventArgs args, Boolean suppressExceptions)
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type EPiServer.Shell.UI.Messaging.Internal.PushMessage. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'Topic', line 1, position 9.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at EPiServer.Shell.UI.Messaging.Internal.DefaultPushMessenger.EventRaised(Object sender, EventNotificationEventArgs e)
   at EPiServer.Events.Clients.Event.<>c__DisplayClass38_0.b__0()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at EPiServer.Events.Clients.Event.Raise(Guid raiserId, Object param, EventRaiseOption raiseOption)
   at EPiServer.Events.Clients.Event.RemoteEventReceived(Object sender, EventReceivedEventArgs e)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at EPiServer.Events.Providers.EventProviderService.OnEventReceived(Object sender, EventReceivedEventArgs e)
---> (Inner Exception #0) Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type EPiServer.Shell.UI.Messaging.Internal.PushMessage. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'Topic', line 1, position 9.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at EPiServer.Shell.UI.Messaging.Internal.DefaultPushMessenger.EventRaised(Object sender, EventNotificationEventArgs e)
   at EPiServer.Events.Clients.Event.<>c__DisplayClass38_0.b__0()
   at System.Threading.Tasks.Task.Execute()<---><--- system.aggregateexception: one or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type EPiServer.Shell.UI.Messaging.Internal.PushMessage. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'Topic', line 1, position 9.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at EPiServer.Shell.UI.Messaging.Internal.DefaultPushMessenger.EventRaised(Object sender, EventNotificationEventArgs e)
   at EPiServer.Events.Clients.Event.<>c__DisplayClass38_0.b__0()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at EPiServer.Events.Clients.Event.Raise(Guid raiserId, Object param, EventRaiseOption raiseOption)
   at EPiServer.Events.Clients.Event.RemoteEventReceived(Object sender, EventReceivedEventArgs e)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at EPiServer.Events.Providers.EventProviderService.OnEventReceived(Object sender, EventReceivedEventArgs e)
   --- End of inner exception stack trace ---
   at EPiServer.Events.Providers.EventProviderService.OnEventReceived(Object sender, EventReceivedEventArgs e)
   at EPiServer.Events.Providers.EventProviderService.Provider_OnMessageReceived(Object sender, EventMessageEventArgs e)
   at EPiServer.Events.Providers.EventProvider.OnMessageReceived(EventMessageEventArgs args, Boolean suppressExceptions)
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type EPiServer.Shell.UI.Messaging.Internal.PushMessage. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'Topic', line 1, position 9.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at EPiServer.Shell.UI.Messaging.Internal.DefaultPushMessenger.EventRaised(Object sender, EventNotificationEventArgs e)
   at EPiServer.Events.Clients.Event.<>c__DisplayClass38_0.b__0()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at EPiServer.Events.Clients.Event.Raise(Guid raiserId, Object param, EventRaiseOption raiseOption)
   at EPiServer.Events.Clients.Event.RemoteEventReceived(Object sender, EventReceivedEventArgs e)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at EPiServer.Events.Providers.EventProviderService.OnEventReceived(Object sender, EventReceivedEventArgs e)
---> (Inner Exception #0) Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type EPiServer.Shell.UI.Messaging.Internal.PushMessage. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'Topic', line 1, position 9.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at EPiServer.Shell.UI.Messaging.Internal.DefaultPushMessenger.EventRaised(Object sender, EventNotificationEventArgs e)
   at EPiServer.Events.Clients.Event.<>c__DisplayClass38_0.b__0()
   at System.Threading.Tasks.Task.Execute()<---><--->

Remote cache invalidation seems to work despite the error, so no panic :) Downside is lots of errors in logs, and it also seems that remote changes are not updated via WebSockets.

#148438
May 12, 2016 23:28
Vote:
 

This is repoted as bug "CMS-3570 Event exception on load balancing enviroment" (bug report is not yet public).

#148531
May 16, 2016 22:28
Vote:
 

+1

I get the same errors in our multi-server environment.

#148672
May 19, 2016 18:25
Vote:
 

Fixed in EPiServer.CMS.UI 9.6.1

#148738
May 22, 2016 23:54
This topic was created over six months ago and has been resolved. If you have a similar question, please create a new topic and refer to this one.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.