次の方法で共有


カスタム HTTP および SOAP ヘッダーのサポート

メモ : このトピックの内容は、Microsoft Office SharePoint Server 2007 SP1 に適用されます。

Web サービスでは、HTTP ヘッダーまたは SOAP ヘッダーを使用して SOAP メッセージに関するアプリケーション固有の情報を提供することができます。たとえば、認証情報や支払い情報を提供できます。 Microsoft Office SharePoint Server 2007 SP1 では、ビジネス データ カタログにより、Web サービスの呼び出しに対してユーザー名とパスワードを渡す際にカスタムの HTTP ヘッダーと SOAP ヘッダーを使用できます。

HTTP ヘッダー

ビジネス データ カタログでは、Microsoft シングル サインオン (SSO) サービス アプリケーションの設定情報に登録されているユーザー名とパスワードを HTTP ヘッダーとして Web サービスの呼び出しに渡すことができます。HTTP ヘッダーの値、つまりユーザー名とパスワードは、Base 64 エンコード扱いとなります。このため、Web サービスではこの値をデコードする必要があります。また、ユーザー名とパスワードの値は暗号化されないため、この機能を使用する Web サービスに対して SSL を使用する必要があります。

HTTP ヘッダーを使用するには、アプリケーション定義ファイルに以下の変更を加える必要があります。

  • LobSystemInstance 要素の SecondarySSOAppID プロパティに、ユーザー名とパスワードを含む Office SharePoint Server 2007 の SSO エンタープライズ アプリケーションの ID を設定します。

  • Web サービスで使用するヘッダー名ごとにメソッドの HttpHeaderUserName と HttpHeaderPassword のプロパティを設定します。

<LobSystemInstance Name="ContosoInstance" DefaultDisplayName="SimpleHTTPInstance">
  <Properties>
    <Property Name="LobSystemName" Type="System.String">Contoso</Property> 
    <Property Name="AuthenticationMode" Type="System.String">WindowsCredentials</Property> 
     …
     …
    <Property Name="SecondarySsoApplicationId" Type="System.String">Contoso</Property> 
  </Properties>
</LobSystemInstance>
<Method Name="HelloWorld" DefaultDisplayName="HelloWorld">
     <Properties>
        <Property Name="HttpHeaderUserName" Type="System.String">UserName</Property>
         <Property Name="HttpHeaderPassword" Type="System.String">UserPassword</Property>
      </Properties>
      …
</Method>

SOAP ヘッダー

ビジネス データ カタログでは、SSO の設定情報に登録されているユーザー名とパスワードを SOAP ヘッダーとして Web サービスの呼び出しに渡すことができます。SOAP ヘッダーの値 (ユーザー名とパスワード) は、Base 64 エンコードではありません。このため、Web サービスでは、以下のサンプルに示すように直接この値を読み込むことができます。ただし、ユーザー名とパスワードの値は暗号化されないため、この機能を使用する Web サービスに対して SSL を使用する必要があります。

SOAP ヘッダーを使用するには、アプリケーション定義ファイルに以下の変更を加えます。

  • LobSystemInstance 要素の SecondarySSOAppID プロパティに、ユーザー名とパスワードを含む Office SharePoint Server 2007 の SSO エンタープライズ アプリケーションの ID を設定します。

  • Method 要素の以下のプロパティを設定します。

    • SoapHeaderUserNameMemberName: Web サービスで認識できるユーザー名の SOAP ヘッダー名。

    • SoapHeaderUserNameMemberFieldName: ユーザー名を含むフィールドの名前。

    • SoapHeaderPasswordMemberName: Web サービスで認識できるパスワードの SOAP ヘッダーの名前。

    • SoapHeaderPasswordMemberFieldName: パスワードを含むフィールドの名前。

注意

また、ビジネス データ カタログでは単独の SOAP ヘッダーのユーザー名とパスワードの設定をサポートします。 ユーザー名とパスワードの両方をサポートする SOAP ヘッダーについては、SoapHeaderUserNameMemberName と SoapHeaderPasswordMemberName のメタデータのプロパティ値は同じ値になります。

<LobSystemInstance Name="ContosoInstance" DefaultDisplayName="SimpleSOAPInstance">
  <Properties>
    <Property Name="LobSystemName" Type="System.String">Contoso</Property> 
    <Property Name="AuthenticationMode" Type="System.String">WindowsCredentials</Property> 
     …
     …
    <Property Name="SecondarySsoApplicationId" Type="System.String">Contoso</Property> 
  </Properties>
</LobSystemInstance>
<Method Name="HelloWorld" DefaultDisplayName="HelloWorld">
   <Properties>
      <Property Name="SoapHeaderUserNameMemberName" Type="System.String">UserNameHeaderValue</Property>
      <Property Name="SoapHeaderUserNameMemberFieldName" Type="System.String">MyValue</Property>
      <Property Name="SoapHeaderPasswordMemberName" Type="System.String">UserPasswordHeaderValue</Property>
      <Property Name="SoapHeaderPasswordMemberFieldName" Type="System.String">MyValue</Property>
   </Properties>
  …
</Method>

重要

SOAP ヘッダーを使用できるようにするには、Web サーバーが SOAP ヘッダーをサポートしている必要があります。さらに、SOAP 属性を各 SOAP ヘッダーの Web メソッドに追加する必要があります。以下にこのコード例を示します。

public class Service : System.Web.Services.WebService
{
    public UserNameHeader UserName;
    public UserPasswordHeader Password;

    public Service () { }
    [WebMethod]
    [SoapHeader("UserName", Direction=SoapHeaderDirection.In)]
    [SoapHeader("Password", Direction=SoapHeaderDirection.In)]
    public void HelloWorld() 
    {
        string password = "";
        string userName = "";
        if (UserName != null)
        {
            userName = UserName.MyValue;
        }
        if (Password != null)
        {
            password = Password.MyValue;
        }

        return null;
    }
}

public class UserNameHeader : SoapHeader
{
    public string MyValue;
}

public class UserPasswordHeader : SoapHeader
{
    public string MyValue;
}

Web メソッドを実行するには、ビジネス データ カタログでプロキシを生成します。バックエンド Web メソッドで SOAP ヘッダーがサポートされている場合、生成されるプロキシは以下のコード例のようになります。

注意

以下の例では、関連するコードのみを示しています。

public partial class Service : System.Web.Services.Protocols.SoapHttpClientProtocol
{
   private UserPasswordHeader userPasswordHeaderValueField;
   private UserNameHeader userNameHeaderValueField;

   public Service() {}

   public UserPasswordHeader UserPasswordHeaderValue
   {
      get { return this.userPasswordHeaderValueField;  }
      set { this.userPasswordHeaderValueField = value; }
   }

   public UserNameHeader UserNameHeaderValue
   {
      get { return this.userNameHeaderValueField;  }
      set { this.userNameHeaderValueField = value; }
   }

   public void HelloWorld()
   {
      object[] results = this.Invoke("HelloWorld", new object[0]);
      return (results[0]);
   }
}

public partial class UserPasswordHeader : System.Web.Services.Protocols.SoapHeader
{
   private string myValueField;

   public string MyValue
   {
      get { return this.myValueField;  }
      set { this.myValueField = value; }
   }
}

public partial class UserNameHeader : System.Web.Services.Protocols.SoapHeader
{
   private string myValueField;

   public string MyValue
   {
      get { return this.myValueField;  }
      set { this.myValueField = value; }
   }
}