SharePoint 2013: Tip para desplegar y probar un manejador de eventos remoto en un despliegue OnPremise (II)!

Siguiendo con la serie de artículos sobre tips para desplegar y probar manejadores de eventos remotos en despliegues On-Premise, en esta ocasión vamos a ver un workaround necesario para que el manejador remoto esté operativo una vez desplegado:

  • Lo primero, os pongo en antecedentes: si creáis un manejador de eventos remoto en una aplicación de tipo SharePoint Hosted, os encontraréis conque al depurar el manejador funciona sin problemas como es esperable. En cambio, si desplegáis la aplicación y probáis el manejador remoto “en real”, pues veréis que no hace nada…¿Qué leches está pasando? Pues sin rascar el detalle, parece qué el servicio WCF con la lógica del manejador no se está registrando de forma correcta con la aplicación.
  • Y ahora a por el workaround para por lo menos conseguir que el manejador esté operativo cuando se despliega la aplicación…si nos vamos al explorador de soluciones de nuestro proyecto, veremos como el proyecto web que contiene la definición del manejador (os recuerdo que es un servicio WCF) tiene Urls de tipo http://localhost:puerto y https://localhost:puerto para las  propiedades Dirección URL y Dirección URL de SSL…lo que nos da una pista de dónde puede estar el problema, ya que la aplicación desplegada en SharePoint va a estar en un dominio aislado que no tiene nada que ver con localhost.

image

  • Esto me lleva de nuevo a qué, por un motivo que todavía no tengo claro, el servicio WCF del manejador no se está registrando de forma correcta con la aplicación…vale, ¿y cómo salimos del paso para probar en real el manejador? Pues de una forma relativamente sencilla: en primer lugar, desde el explorador de soluciones hacemos un “Browse” del servicio WCF para qué esté levantado.

image

  • En segundo lugar, en el proyecto de aplicación para SharePoint editamos el archivo “elements.xml” en el qué están definido el manejador y en particular los eventos a controlar. Si os fijáis en dicha definición, veréis que por cada evento a controlar hay una sección <Receiver> y dentro de la misma se recoge el tipo de evento a manejar utilizando la sección <Type> y la Url dónde está disponible el servicio WCF mediante la sección <Url>. Precisamente es la sección <Url> la clave de todo. Por defecto, el valor de la misma es algo así como ~remoteAppUrl/ServicioWCFManejador.svc…pero, por el motivo qué sea cuando se despliega la aplicación y se añade en un sitio, ese servicio WCF no está disponible en esa Url. Entonces, para qué el manejador esté operativo reemplazamos el valor de <Url> por el valor de la propiedad Dirección URL qué hemos comentado antes, es decir, por un valor de la forma http://localhost:puerto/ServicioWCFManejador.svc. Desplegamos de nuevo la aplicación y al probarla, comprobaremos qué el manejador funciona como debería.
   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   3:    <Receivers ListTemplateId="10000">
   4:        <Receiver>
   5:          <Name>SPRERSampleItemAdding</Name>
   6:          <Type>ItemAdding</Type>
   7:          <SequenceNumber>10000</SequenceNumber>
   8:          <Url>http://localhost:17083/SPRERSample.svc</Url>
   9:        </Receiver>
  10:        <Receiver>
  11:          <Name>SPRERSampleItemDeleting</Name>
  12:          <Type>ItemDeleting</Type>
  13:          <SequenceNumber>10000</SequenceNumber>
  14:          <Url>~remoteAppUrl/SPRERSample.svc</Url>
  15:        </Receiver>
  16:        <Receiver>
  17:          <Name>SPRERSampleItemAdded</Name>
  18:          <Type>ItemAdded</Type>
  19:          <SequenceNumber>10000</SequenceNumber>
  20:          <Url>~remoteAppUrl/SPRERSample.svc</Url>
  21:        </Receiver>
  22:    </Receivers>
  23:  </Elements>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

En el próximo post de la serie, espero contaros como registrar de forma correcta el manejador remoto en SharePoint 2013 OnPremise para evitar tener que realizar estos workaround.