Поделиться через


Поддержка настраиваемых заголовков HTTP и SOAP

Дата последнего изменения: 16 апреля 2010 г.

Применимо к: SharePoint Server 2010

В этой статье
Заголовки HTTP
Заголовки SOAP
Настраиваемые заголовки SOAP

При работе с веб-службами можно использовать заголовки HTTP или SOAP для предоставления сведений о сообщении SOAP для конкретных приложений. Например, можно предоставлять сведения о проверке подлинности и платежах. Служба подключения к бизнес-данным (BDC) поддерживает передачу сведений об имени и пароле пользователя в вызовы веб-службы с помощью настраиваемых заголовков HTTP и SOAP.

Заголовки HTTP

Служба подключения к бизнес-данным поддерживает передачу имени и пароля пользователя, которые хранятся в поставщике службы безопасного хранения, в вызовы веб-службы в виде заголовков HTTP. Значения заголовка HTTP (имя и пароль пользователя) кодируются с применением стандарта Base64. В связи с этим в веб-службе необходимо предусмотреть функции декодирования значений. Кроме того, поскольку значения имени и пароля пользователя не шифруются, для работы с веб-службами, использующими этот компонент, необходимо применять протокол SSL.

ПримечаниеПримечание

Привязка веб-службы должна поддерживать транспорт HTTP. Обратите внимание, что поддержка этого транспорта не обязательна для передачи заголовков SOAP.

Чтобы использовать заголовки HTTP, необходимо внести следующие изменения в файл определения приложения:

  1. Присвойте свойству SecondarySsoApplicationId элемента LobSystemInstance значение, определяющее идентификатор целевого приложения для приложения безопасного хранения, в котором хранятся имя пользователя и пароль.

  2. Присвойте свойствам 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

Служба подключения к бизнес-данным также поддерживает передачу имени и пароля пользователя, которые хранятся в параметрах службы безопасного хранения, в вызовы веб-службы в виде заголовков SOAP. Значения заголовка SOAP (имя и пароль пользователя) не кодируются с применением стандарта Base64. В связи с этим в веб-службе можно использовать эти значения напрямую, как показано в следующем примере. Однако, поскольку значения имени и пароля пользователя не шифруются, для работы с веб-службами, использующими этот компонент, необходимо применять протокол SSL.

Чтобы использовать заголовки SOAP, необходимо внести следующие изменения в файл определения приложения:

  1. Присвойте свойству SecondarySsoApplicationId элемента LobSystemInstance значение, определяющее идентификатор конечного приложения безопасного хранения, содержащего имя пользователя и пароль.

  2. Установите следующие свойства элемента Method:

    1. SoapHeaderUserNameMemberName: имя заголовка имени пользователя SOAP, понятное для веб-службы.

    2. SoapHeaderUserNameMemberFieldName: имя поля, которое содержит имя пользователя.

    3. SoapHeaderPasswordMemberName: имя заголовка пароля SOAP, понятное для веб-службы.

    4. 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 требуется их поддержка веб-сервером. Кроме того, необходимо добавить атрибут SOAP в веб-метод для каждого заголовка SOAP. Это показано в следующем примере кода.

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;
}

Как известно, для выполнения веб-методов службой подключения к бизнес-данным создается прокси-сервер. Если серверный веб-метод поддерживает заголовки 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; }
   }
}

Настраиваемые заголовки SOAP

Можно добавить настраиваемые заголовки SOAP с любым методом стереотипа для заданного экземпляра LobSystemInstance. В настраиваемых заголовках SOAP BDC заменяет маркеры имени и пароля пользователя значениями, хранящимися в службе безопасного хранения. Если в модели заданы настраиваемые заголовки SOAP, BDC не проверяет, предоставляются ли эти заголовки SOAP веб-службой. Обратите внимание, что такое поведение контрастирует с использованием заголовков SOAP, поскольку в этом случае в BDC обязательно проверяется, определены ли заголовки SOAP в веб-службе.

Чтобы использовать настраиваемые заголовки SOAP, необходимо внести следующие изменения в файл определения приложения:

  1. Присвойте свойству SecondarySsoApplicationId элемента LobSystemInstance значение, определяющее идентификатор конечного приложения безопасного хранения, содержащего имя пользователя и пароль.

  2. Добавьте свойство SoapHeaderXml в элемент LobSystemInstance. Свойство SoapHeaderXml в BDC определяет необходимость отправки настраиваемых заголовков SOAP в веб-службу при каждом вызове.

    Свойство SoapHeaderXml содержит заголовки имени пользователя и пароля в понятном для веб-службы формате. Значения имени пользователя и пароля представлены маркерами, которые впоследствии заменяются в BDC значениями, извлекаемыми из службы безопасного хранения перед отправкой запроса в веб-службу.

  3. Присвойте свойствам Username и Password в свойстве SoapHeaderXml маркеры, которые впоследствии будут заменены в BDC.

  4. Присвойте свойству SoapHeaderXmlUserNameToken маркер, который будет заменен значением имени пользователя в настраиваемом заголовке SOAP.

  5. Присвойте свойству SoapHeaderXmlPasswordToken маркер, который будет заменен значением пароля в настраиваемом заголовке SOAP.

В следующем примере показаны эти свойства в файле определения приложения.

<LobSystemInstance Name="Lsi_WithCustomHeaders">
  <Properties>
    <Property Name="WcfAuthenticationMode" Type="System.String">PassThrough</Property>
    <Property Name="WcfEndpointAddress" Type="System.String"> WCF Endpoint Address </Property>
    <Property Name="SecondarySsoApplicationId" Type="System.String">Contoso</Property>
    <Property Name="SsoProviderImplementation" Type="System.String">Microsoft.Office.BusinessData.Infrastructure.SecureStore.LocalSecureStoreProvider, Microsoft.Office.BusinessData, Version=14.0.0.0, Culture=neutral, PublicKeyToken=94de0004b6e3fcc5</Property>
    <Property Name="SoapHeaderXml" Type="System.String">
      &lt;wsse:Security xmlns:wsse="https://schemas.xmlsoap.org/ws/2002/04/secext"&gt;
      &lt;wsse:UsernameToken&gt;
      &lt;wsse:Username&gt;CONTOSO_USERNAME_TOKEN&lt;/wsse:Username&gt;
      &lt;wsse:Password Type="wsse:PasswordText"&gt;CONTOSO_PASSWORD_TOKEN&lt;/wsse:Password&gt;
      &lt;/wsse:UsernameToken&gt;
      &lt;/wsse:Security&gt;
    </Property>
    <Property Name="SoapHeaderXmlUserNameToken" Type="System.String">CONTOSO_USERNAME_TOKEN</Property>
    <Property Name="SoapHeaderXmlPasswordToken" Type="System.String">CONTOSO_PASSWORD_TOKEN</Property>
  </Properties>
</LobSystemInstance>