Partager via


Procédure : créer un redirecteur de demande HTTP pour des applications externes

Cette rubrique explique comment créer un gestionnaire de requêtes HTTP redirecteur.

Dernière modification : mercredi 13 janvier 2010

S’applique à : SharePoint Foundation 2010

Certaines applications, telles que Silverlight, ne peuvent pas émettre des requêtes inter-domaines. Lorsque l’application doit communiquer avec un serveur sur un autre domaine, ses requêtes doivent d’abord être envoyées au gestionnaire redirecteur, qui se trouve évidemment sur le même domaine que l’application. Le gestionnaire peut ensuite rempaqueter la requête et l’envoyer à destination dans le domaine externe.

Si un composant WebPart Silverlight héberge une application Silverlight sur un domaine différent de l’application Web SharePoint Foundation dont la page contient le composant WebPart, et si l’application Silverlight doit envoyer des requêtes à l’application Web, un gestionnaire redirecteur de requêtes doit être créé et installé sur le domaine de l’application Silverlight. L’URL du gestionnaire est spécifiée dans Code XML d’application externe lorsque le composant WebPart est ajouté à une page. Pour plus d’informations sur la création de ce code XML, voir Procédure : créer le balisage XML d’application externe.

La plupart de la logique nécessaire au gestionnaire se trouve dans la classe RequestForwarder. La classe de gestionnaire que vous créez est une sorte de wrapper de cette classe.

Pour créer un gestionnaire redirecteur de requêtes

  1. Ajoutez un fichier de texte brut à votre projet Visual Studio et donnez-lui une extension .ashx.

  2. Ajoutez une directive WebHandler en haut de la page. Utilisez les attributs Language et Class pour spécifier le langage de programmation et la classe qui implémenteront le gestionnaire. Voici un exemple.

    <%@ WebHandler Language="C#" Class="ToSharePointForwarder" %>
    
  3. Sous cette directive, vous ajoutez le code exactement comme dans un fichier de code ordinaire. Commencez par des instructions using, dont une pour l’espace de noms Microsoft.SharePoint.Client.

    using System;
    using System.Web;
    using Microsoft.SharePoint.Client;
    
    Imports System
    Imports System.Web
    Imports Microsoft.SharePoint.Client
    
  4. Ajoutez la déclaration de votre classe de gestionnaire. Comme il s’agit d’un gestionnaire HTTP, elle doit implémenter l’interface IHttpHandler.

    public class ToSharePointForwarder : IHttpHandler 
    {    
    }
    
    Public Class ToSharePointForwarder
            Implements IHttpHandler
    End Class
    
  5. Ajoutez une implémentation de la propriété IsReusable. Elle doit simplement retourner false.

    public bool IsReusable 
    {
        get { return false; }
    }
    
    Public ReadOnly Property IsReusable() As Boolean
            Get
                    Return False
            End Get
    End Property
    
  6. Ajoutez une implémentation de la méthode ProcessRequest(HttpContext). En majeure partie, votre implémentation est simplement un wrapper de la méthode ProcessRequest() de la classe RequestForwarder. Cependant, vous devez d’abord ajouter les informations d’identification du principal de l’application à la requête. Dans cet exemple, NetworkCredential est construit à partir du nom et du mot de passe d’ouverture de session de l’utilisateur principal de l’application et du domaine Active Directory de cet utilisateur.

    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