Today I encountered a very upsetting and unexpected error using SharePoint 2013 on premise Remote Event Receivers.
I’ve configured a local WCF service to handle the events and that worked rather well for the first few versions. But after enough updates, some items didn’t trigger any events anymore. Strange 🙂
So I fired up good old UlsViewer and found out that:
Calling remote event receiver failed. URL = [https://***/Services/RemoteEventReceiver.svc], App Identifier = , Event Type = [ItemUpdated], Exception = [The remote server returned an unexpected response: (413) Request Entity Too Large.]
The HTTP status code 413 indeed signals a Request Entity Too Large. So I was starting to think that it had nothing to do with SharePoint. I looked through the IIS Failed Request Logs and found that my service was indeed throwing a 413 message.
The reason behind this is that WCF by default only accepts messages up to 65536 bytes (https://social.msdn.microsoft.com/Forums/en-US/de4f78af-5b03-4844-be52-335ab13a4f0c/remote-event-receiver-does-not-fire-for-some-items-same-list-one-item-works-one-does-not-checked?forum=appsforsharepoint).
How to fix this? Just set the maxReceivedMessageSize to a larger value:
<bindings> <basicHttpBinding> <!--Used by SharePoint Add-in--> <binding name="secureBinding" maxReceivedMessageSize="1000000000"> <security mode="Transport" /> </binding> </basicHttpBinding> </bindings>
This however doesn’t explain yet why the message size increases gradually for items being updated many times.
What I’ve also found is that inside the message, there are several expected properties of the SPRemoteEventProperties object like BeforeProperties, AfterProperties that contain way more information than you’d expect. One such key in those dictionaries is “snapshots”. This is a SnapshotCollection XML string that contains all changes of all fields up until now. You can imagine how this grows…
As I didn’t find much documentation on this, I’ll just post the basic structure of this object here for future reference
SnapshotCollection [NextSnapshotNumber, NextInternalId] Items Item [Id, Guid, Url, LinkToDoc] Snapshots Snapshot Comments +Value Fields Field [Id] +Value SnapshotItems SnapshotItem [Id, Version]