Freigeben über


Gewusst wie: Erstellen einer HTTP-Anforderungsweiterleitung für externe Anwendungen

In diesem Thema wird das Erstellen eines HTTP-Anforderungshandlers für die Anforderungsweiterleitung erläutert.

Letzte Änderung: Mittwoch, 13. Januar 2010

Gilt für: SharePoint Foundation 2010

In manchen Anwendungen, beispielsweise Silverlight, können keine domänenübergreifenden Anforderungen ausgeführt werden. Wenn die Anwendung mit einem Server in einer anderen Domäne kommunizieren muss, müssen die Anforderungen erst an den Anforderungsweiterleitungshandler gesendet werden, der sich natürlich in der gleichen Domäne befinden muss wie die Anwendung. Dann kann die Anforderung vom Handler neu gepackt und an das Ziel in der externen Domäne gesendet werden.

Wenn in einem Silverlight-Webpart eine Silverlight-Anwendung in einer anderen Domäne gehostet wird als die SharePoint Foundation-Webanwendung, deren Seite das Webpart enthält, und über die Silverlight-Anwendung Anforderungen an die Webanwendung gesendet werden müssen, müssen Sie einen Anforderungsweiterleitungshandler erstellen und diesen in der Domäne der Silverlight-Anwendung installieren. Die URL des Handlers wird beim Hinzufügen des Webparts zu einer Seite in Externes Anwendungs-XML angegeben. Weitere Informationen zum Erstellen dieser XML finden Sie unter Gewusst wie: Erstellen von Markup mit externer Anwendungs-XML.

Der größte Teil der vom Handler benötigten Logik ist in der RequestForwarder-Klasse enthalten. Die Handlerklasse, die Sie erstellen, ist eine Art von Wrapper für diese Klasse.

So erstellen Sie einen Anforderungsweiterleitungshandler

  1. Fügen Sie dem Visual Studio-Projekt eine Klartextdatei hinzu, und geben Sie dieser die Erweiterung ASHX.

  2. Fügen Sie oben auf der Seite eine WebHandler-Direktive hinzu. Geben Sie mithilfe der Attribute Language und Class die Programmiersprache an sowie die Klasse, von der der Handler implementiert wird. Der folgende Code ist ein Beispiel dafür.

    <%@ WebHandler Language="C#" Class="ToSharePointForwarder" %>
    
  3. Unter dieser Direktive fügen Sie genau wie in einer normalen Codedatei Code hinzu. Fügen Sie zuerst using-Anweisungen hinzu, einschließlich einer Anweisung für den Microsoft.SharePoint.Client-Namespace.

    using System;
    using System.Web;
    using Microsoft.SharePoint.Client;
    
    Imports System
    Imports System.Web
    Imports Microsoft.SharePoint.Client
    
  4. Fügen Sie eine Deklaration für die Handlerklasse hinzu. Da es sich um einen HTTP-Handler handelt, muss die IHttpHandler-Schnittstelle implementiert werden.

    public class ToSharePointForwarder : IHttpHandler 
    {    
    }
    
    Public Class ToSharePointForwarder
            Implements IHttpHandler
    End Class
    
  5. Fügen Sie eine Implementierung der IsReusable-Eigenschaft hinzu. Dadurch sollte false zurückgegeben werden.

    public bool IsReusable 
    {
        get { return false; }
    }
    
    Public ReadOnly Property IsReusable() As Boolean
            Get
                    Return False
            End Get
    End Property
    
  6. Fügen Sie eine Implementierung der ProcessRequest(HttpContext)-Methode hinzu. Die Implementierung stellt in erster Linie einfach einen Wrapper für die ProcessRequest()-Methode der RequestForwarder-Klasse dar. Sie müssen jedoch zuerst die Anmeldeinformationen des Anwendungsprinzipals der Anforderung hinzufügen. In diesem Beispiel wird aus dem Anmeldenamen und dem Kennwort des Anwendungsprinzipalbenutzers und der Active Directory-Domäne dieses Benutzers ein NetworkCredential erstellt.

    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