Compartir a través de


Procedimiento para crear un reenviador de solicitudes HTTP para aplicaciones externas

En este tema se explica cómo crear un controlador de reenvío de solicitudes HTTP.

Última modificación: miércoles, 13 de enero de 2010

Hace referencia a: SharePoint Foundation 2010

Algunas aplicaciones, como Silverlight, no pueden realizar solicitudes entre dominios. Cuando la aplicación necesita establecer una comunicación con un servidor de otro dominio, sus solicitudes primero deben enviarse al controlador de reenvío de solicitudes que, por supuesto, se encuentra en el mismo dominio que la aplicación. Posteriormente, el controlador puede volver a empaquetar la solicitud y enviarla al destino del dominio externo.

Si un elemento web de Silverlight hospeda una aplicación de Silverlight en otro dominio de la aplicación web de SharePoint Foundation cuya página tiene el elemento web y si la aplicación de Silverlight necesita enviar solicitudes a la aplicación web, se debe crear un controlador de reenvío de solicitudes e instalarlo en el dominio de la aplicación de Silverlight. La dirección URL del controlador se especifica en el XML de aplicación externa al agregar el elemento web a una página. Para obtener más información acerca de la creación de este XML, vea Procedimiento para crear un marcado XML de aplicación externa.

La mayor parte de la lógica que necesita el controlador se incluye en la clase RequestForwarder. La clase de controlador que se crea es un tipo de contenedor de esta clase.

Para crear un controlador de reenvío de solicitudes

  1. Agregue un archivo de texto sin formato a su proyecto de Visual Studio y proporciónele una extensión .ashx.

  2. Agregue una directiva WebHandler en la parte superior de la página. Use los atributos Language y Class para especificar el lenguaje de programación y la clase que implementará el controlador. A continuación se muestra un ejemplo.

    <%@ WebHandler Language="C#" Class="ToSharePointForwarder" %>
    
  3. Por debajo de esta directiva, puede agregar código exactamente de la misma manera que en un archivo de código común. Comience con la adición de instrucciones using, incluida una para el espacio de nombres Microsoft.SharePoint.Client.

    using System;
    using System.Web;
    using Microsoft.SharePoint.Client;
    
    Imports System
    Imports System.Web
    Imports Microsoft.SharePoint.Client
    
  4. Agregue una declaración para la clase de controlador. Debido a que se trata de un controlador HTTP, debe implementar la interfaz IHttpHandler.

    public class ToSharePointForwarder : IHttpHandler 
    {    
    }
    
    Public Class ToSharePointForwarder
            Implements IHttpHandler
    End Class
    
  5. Agregue una implementación de la propiedad IsReusable. Debería devolver simplemente false.

    public bool IsReusable 
    {
        get { return false; }
    }
    
    Public ReadOnly Property IsReusable() As Boolean
            Get
                    Return False
            End Get
    End Property
    
  6. Agregue una implementación del método ProcessRequest(HttpContext). En general, la implementación será simplemente un contenedor del método ProcessRequest() de la clase RequestForwarder. Sin embargo, debe agregar en primer lugar las credenciales de la entidad de seguridad de la aplicación a la solicitud. En este ejemplo, se construye NetworkCredential a partir del nombre de inicio de sesión y de la contraseña del usuario de entidad de seguridad de la aplicación y del dominio de Active Directory de ese usuario.

    public void ProcessRequest (HttpContext context) 
    {
        RequestForwarder forwarder = new RequestForwarder(context);
        if (!String.IsNullOrEmpty(forwarder.Url))
        {        forwarder.WebRequest.Credentials = new System.Net.NetworkCredential("ContosoSilverlightApp", "&Tu*)2v", "Contoso");
            forwarder.ProcessRequest();
        }
    }
    
    Public Sub ProcessRequest(ByVal context As HttpContext)
        Dim forwarder As New RequestForwarder(context)
        If Not String.IsNullOrEmpty(forwarder.Url) Then
            forwarder.WebRequest.Credentials = New System.Net.NetworkCredential("ContosoSilverlightApp", "&Tu*)2v", "Contoso")
            forwarder.ProcessRequest()
        End If
    End Sub