0

This question is an exact duplicate of:

I created an app that when installed adds a RER to a list by code. I have copied pasted the ACS connection string from azure service bus.

The app starts deploying but after one minute or two I got this error:

@"Error 1
        CorrelationId: 28281df5-1492-4321-a6d3-08f6787ad0b8
        ErrorDetail: The remote event receiver callout didn't return a successful result.
        ErrorType: App
        ErrorTypeName: App Related
        ExceptionMessage: 
        Source: Common
        SourceName: Common App Deployment

The code is as follows:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.EventReceivers;
using Capatech.IntranetWeb.Provisioning;
using System.ServiceModel;
using System.ServiceModel.Channels;

namespace xxx.IntranetWeb.Services
{
    public class AppEventReceiver : IRemoteEventService
    {
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();
            try
            {              
                switch (properties.EventType)
                {
                    case SPRemoteEventType.AppInstalled:
                        AppEvents.AppInstalled(properties);
                        result.Status = SPRemoteEventServiceStatus.Continue;
                        break;
                    case SPRemoteEventType.AppUninstalling:
                        //this.HandleAppUnInstall(properties);
                        result.Status = SPRemoteEventServiceStatus.Continue;
                        break;
                    case SPRemoteEventType.AppUpgraded:
                        AppEvents.AppUpgraded(properties);
                        result.Status = SPRemoteEventServiceStatus.Continue;
                        break;

                }
                return result;
            }
            catch (Exception ex)
            {
                //Log message
                result.ErrorMessage = "Capatech.Intranet:  " + ex.Message;
                result.Status = SPRemoteEventServiceStatus.CancelWithError;
                return result;
            }
        }

        /// <summary>
        /// To handle list events
        /// </summary>
        /// <param name="properties"></param>
        public void ProcessOneWayEvent(SPRemoteEventProperties properties)
        {
            //Remote event receivers for clients
            if (properties.ListEventProperties.ListTitle == "Clientes")
            {
                switch (properties.EventType)
                {
                    case SPRemoteEventType.ItemAdded:
                        Clients.HandleItemClientAdded(properties);
                        break;
                    case SPRemoteEventType.ItemUpdated:
                        Clients.HandleItemClientAdded(properties);
                        break;
                }
            }
        }




    }
}




using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.EventReceivers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace xxx.IntranetWeb.Provisioning
{
    public static class AppEvents
    {
        const string CLIENTES_ITEMADDED = "CLIENTES_ITEMADDED";


        /// <summary>
        /// Metodo que se ejecuta al instalarse por primera vez
        /// </summary>
        /// <param name="properties">Propiedades del evento remoto</param>
        public static void AppInstalled(SPRemoteEventProperties properties)
        {
            Uri hostWebURL = properties.AppEventProperties.HostWebFullUrl;
            Uri appWebURL = properties.AppEventProperties.AppWebFullUrl;

            using (ClientContext cc = TokenHelper.CreateAppEventClientContext(properties, false))
            {

                //Create a property bag to know which version the app is installed on the site
                cc.Web.SetPropertyBagValue("Capatech.Intranet.Version", 1); 

                //Associate by code the Remote Event Receivers
                Clients.AssociateItemAddedEventReceiverToClientList(cc);
                Proyectos.AssociateItemAddedEventReceiverToProjectList(cc);

                //Hide on the new forms the client site and the version
                Clients.ConfigureClientFields(cc);

                //Creacion de librerias de documentos 


                // CSOM code that accesses the host web
            }           
        }

        public static void AppUpgraded(SPRemoteEventProperties properties)
        {
            Uri hostWebURL = properties.AppEventProperties.HostWebFullUrl;
            Uri appWebURL = properties.AppEventProperties.AppWebFullUrl;

            using (ClientContext cc = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                Version ver2OOO = new Version("2.0.0.0");
                if (properties.AppEventProperties.PreviousVersion < ver2OOO)
                {
                    // Code to update from 1.0.0.0 to 2.0.0.0 (previous update code) is here.
                }
            }
        }

        private static void CleanUp(ClientContext ctx)
        {
            List clientsList = ctx.Web.Lists.GetByTitle("Clientes");
            ctx.Load(clientsList, p => p.EventReceivers);
            ctx.ExecuteQuery();

            var rer = clientsList.EventReceivers.Where(
                e => e.ReceiverName == CLIENTES_ITEMADDED).FirstOrDefault();

            try
            {
                System.Diagnostics.Trace.WriteLine("Removing ItemAdded receiver at " + rer.ReceiverUrl);

                //This will fail when deploying via F5, but works when deployed to production
                rer.DeleteObject();
                ctx.ExecuteQuery();
            }
            catch (Exception _ex)
            {
                System.Diagnostics.Trace.WriteLine(_ex.Message);
            }

        }
    }
}



using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.EventReceivers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Web;

namespace xxx.IntranetWeb.Provisioning
{
    /// <summary>
    /// Methods to provision Client subsites and their info, lists and content types.
    /// </summary>
    public static class Clients
    {
        const string CLIENTES_ITEMADDED = "CLIENTES_ITEMADDED";
        const string CLIENTES_ITEMUPDATED = "CLIENTES_ITEMUPDATED";

        /// <summary>
        /// Associate RER to client list.
        /// </summary>
        /// <param name="clientcontext">Client context</param>
        public static void AssociateItemAddedEventReceiverToClientList(ClientContext clientcontext)
        {
            List clientList = clientcontext.Web.Lists.GetByTitle("Clientes");
            clientcontext.Load(clientList);

            var eventReceivers = clientList.EventReceivers;
            clientcontext.Load(eventReceivers);

            clientcontext.ExecuteQuery();

            var rerExists = false;

            foreach (var rer in clientList.EventReceivers)
            {
                if (rer.ReceiverName == CLIENTES_ITEMADDED)
                {
                    rerExists = true;
                    System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at " + rer.ReceiverUrl);
                }
            }

            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemAdded;
                //receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                //Get WCF URL where this message was handled
                OperationContext op = OperationContext.Current;
                Message msg = op.RequestContext.RequestMessage;

                receiver.ReceiverUrl = msg.Headers.To.ToString();
                receiver.ReceiverName = CLIENTES_ITEMADDED;
                //Add the new event receiver to a list in the host web

                clientList.EventReceivers.Add(receiver);

                clientcontext.ExecuteQuery();
            }
        }

        /// <summary>
        /// This method is executed when a new client is added to the list
        /// </summary>
        /// <param name="properties">Remote vent properties</param>
        public static void HandleItemClientAdded(SPRemoteEventProperties properties)
        {           
            using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            {
                if (clientContext != null)
                {
                    CreateClientSiteAndUpdateSiteOnList(properties, clientContext);
                }
            }
        }

        /// <summary>
        /// Method to create a client site
        /// </summary>
        /// <param name="properties">Remote event properties</param>
        /// <param name="clientContext">Client Context</param>
        private static void CreateClientSiteAndUpdateSiteOnList(SPRemoteEventProperties properties, ClientContext clientContext)
        {
            List requestList = clientContext.Web.Lists.GetById(properties.ItemEventProperties.ListId);
            ListItem item = requestList.GetItemById(properties.ItemEventProperties.ListItemId);
            clientContext.Load(item);
            clientContext.ExecuteQuery();

            string site_title = item["NIT"].ToString() + " " + item["Nombre Cliente"].ToString();
            string site_url = item["NIT"].ToString();

            Web newWeb = clientContext.Web.CreateWeb(site_title, site_url, site_title, "STS#0", 1033);
            clientContext.Load(newWeb);
            clientContext.ExecuteQuery();

            //Updates site on the client list
            FieldUrlValue siteUrl = new FieldUrlValue();
            siteUrl.Url = newWeb.Url;
            siteUrl.Description = site_title + " Sitio";
            item["Sitio Cliente"] = siteUrl;
            item.Update();
            clientContext.ExecuteQuery();
        }

        /// <summary>
        /// Configure properties on the client fields
        /// </summary>
        /// <param name="ctx">Client context</param>
        public static void ConfigureClientFields(ClientContext ctx)
        {
            List clientList = ctx.Web.Lists.GetByTitle("Clientes");
            ctx.Load(clientList);
            ctx.ExecuteQuery();

            clientList.Fields.GetByInternalNameOrTitle("Sitio Cliente").SetShowInNewForm(false);
            clientList.Fields.GetByInternalNameOrTitle("Version Sitio").SetShowInEditForm(false);
            ctx.ExecuteQuery();
        }

        /// <summary>
        /// This method is executed when a client info is updated
        /// </summary>
        /// <param name="properties">Remote event properties</param>
        public static void HandleItemClientUpdated(SPRemoteEventProperties properties)
        {

        }
    }
}

marked as duplicate by Eric Alexander Jan 22 '15 at 3:15

This question was marked as an exact duplicate of an existing question.

  • Quit reposting the same question, consider offering a bounty to get more visibility to your question – Eric Alexander Jan 22 '15 at 3:15
  • ITS NOT THE SAME QUESTION, ITS COMPLETELY DIFFERENT – Luis Valencia Jan 22 '15 at 13:03

Browse other questions tagged or ask your own question.