次の方法で共有


外部アプリケーション用の HTTP 要求フォワーダーを作成する

このトピックでは、要求転送 HTTP 要求ハンドラーの作成方法を説明します。

最終更新日: 2010年1月13日

適用対象: SharePoint Foundation 2010

Silverlight などのアプリケーションではクロス ドメインの要求を作成できません。アプリケーションが別のドメイン上のサーバーと通信する場合、要求をまず要求転送ハンドラーに送信します (この要求フォワーダーは当然、このアプリケーションと同じドメイン内にあります)。次にこのハンドラーが要求を再パッケージ化して、外部ドメイン上の宛先のサーバーに送信します。

Silverlight Web パーツが、ページに Web パーツがある SharePoint Foundation Web アプリケーションとは別のドメインにある Silverlight アプリケーションをホストし、Silverlight アプリケーションが要求を Web アプリケーションに送信する必要がある場合、要求転送ハンドラーを作成して、Silverlight アプリケーションのドメインにインストールする必要があります。ハンドラーの URL は、Web パーツをページに追加するときに、外部アプリケーション XML で指定します。この XML の作成の詳細については、「[方法] 外部アプリケーションの XML マークアップを作成する」を参照してください。

このハンドラーに必要なロジックの大部分は、RequestForwarder クラスに含まれています。作成するハンドラー クラスは、このクラスのラッパーのようなものです。

要求転送ハンドラーを作成するには

  1. Visual Studio プロジェクトにプレーン テキスト ファイルを追加して、拡張子を .ashx にします。

  2. ページの最上部に WebHandler ディレクティブを追加します。Language 属性と Class 属性を使用して、プログラミング言語と、ハンドラーを実装するクラスを指定します。次に例を示します。

    <%@ WebHandler Language="C#" Class="ToSharePointForwarder" %>
    
  3. このディレクティブの下に、通常のコード ファイルのようにコードを追加します。最初に using ステートメントを追加して、Microsoft.SharePoint.Client などの名前空間を含めます。

    using System;
    using System.Web;
    using Microsoft.SharePoint.Client;
    
    Imports System
    Imports System.Web
    Imports Microsoft.SharePoint.Client
    
  4. ハンドラー クラスの宣言を追加します。HTTP ハンドラーなので、IHttpHandler インターフェイスを実装する必要があります。

    public class ToSharePointForwarder : IHttpHandler 
    {    
    }
    
    Public Class ToSharePointForwarder
            Implements IHttpHandler
    End Class
    
  5. IsReusable プロパティの実装を追加します。単に、false を返すだけです。

    public bool IsReusable 
    {
        get { return false; }
    }
    
    Public ReadOnly Property IsReusable() As Boolean
            Get
                    Return False
            End Get
    End Property
    
  6. ProcessRequest(HttpContext) メソッドの実装を追加します。ほとんどの部分について、実装は RequestForwarder クラスの ProcessRequest() メソッドのラッパーです。ただし、要求に対するアプリケーション プリンシパルの資格情報を最初に追加する必要があります。この例では、NetworkCredential が、アプリケーション プリンシパル ユーザーとそのユーザーの Active Directory ドメインのログオン名およびパスワードから作成されます。

    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