Поддержка настраиваемых заголовков HTTP и SOAP
Дата последнего изменения: 16 апреля 2010 г.
Применимо к: SharePoint Server 2010
В этой статье
Заголовки HTTP
Заголовки SOAP
Настраиваемые заголовки SOAP
При работе с веб-службами можно использовать заголовки HTTP или SOAP для предоставления сведений о сообщении SOAP для конкретных приложений. Например, можно предоставлять сведения о проверке подлинности и платежах. Служба подключения к бизнес-данным (BDC) поддерживает передачу сведений об имени и пароле пользователя в вызовы веб-службы с помощью настраиваемых заголовков HTTP и SOAP.
Заголовки HTTP
Служба подключения к бизнес-данным поддерживает передачу имени и пароля пользователя, которые хранятся в поставщике службы безопасного хранения, в вызовы веб-службы в виде заголовков HTTP. Значения заголовка HTTP (имя и пароль пользователя) кодируются с применением стандарта Base64. В связи с этим в веб-службе необходимо предусмотреть функции декодирования значений. Кроме того, поскольку значения имени и пароля пользователя не шифруются, для работы с веб-службами, использующими этот компонент, необходимо применять протокол SSL.
![]() |
---|
Привязка веб-службы должна поддерживать транспорт HTTP. Обратите внимание, что поддержка этого транспорта не обязательна для передачи заголовков SOAP. |
Чтобы использовать заголовки HTTP, необходимо внести следующие изменения в файл определения приложения:
Присвойте свойству SecondarySsoApplicationId элемента LobSystemInstance значение, определяющее идентификатор целевого приложения для приложения безопасного хранения, в котором хранятся имя пользователя и пароль.
Присвойте свойствам 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, необходимо внести следующие изменения в файл определения приложения:
Присвойте свойству SecondarySsoApplicationId элемента LobSystemInstance значение, определяющее идентификатор конечного приложения безопасного хранения, содержащего имя пользователя и пароль.
Установите следующие свойства элемента Method:
SoapHeaderUserNameMemberName: имя заголовка имени пользователя SOAP, понятное для веб-службы.
SoapHeaderUserNameMemberFieldName: имя поля, которое содержит имя пользователя.
SoapHeaderPasswordMemberName: имя заголовка пароля 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 требуется их поддержка веб-сервером. Кроме того, необходимо добавить атрибут 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, необходимо внести следующие изменения в файл определения приложения:
Присвойте свойству SecondarySsoApplicationId элемента LobSystemInstance значение, определяющее идентификатор конечного приложения безопасного хранения, содержащего имя пользователя и пароль.
Добавьте свойство SoapHeaderXml в элемент LobSystemInstance. Свойство SoapHeaderXml в BDC определяет необходимость отправки настраиваемых заголовков SOAP в веб-службу при каждом вызове.
Свойство SoapHeaderXml содержит заголовки имени пользователя и пароля в понятном для веб-службы формате. Значения имени пользователя и пароля представлены маркерами, которые впоследствии заменяются в BDC значениями, извлекаемыми из службы безопасного хранения перед отправкой запроса в веб-службу.
Присвойте свойствам Username и Password в свойстве SoapHeaderXml маркеры, которые впоследствии будут заменены в BDC.
Присвойте свойству SoapHeaderXmlUserNameToken маркер, который будет заменен значением имени пользователя в настраиваемом заголовке SOAP.
Присвойте свойству 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">
<wsse:Security xmlns:wsse="https://schemas.xmlsoap.org/ws/2002/04/secext">
<wsse:UsernameToken>
<wsse:Username>CONTOSO_USERNAME_TOKEN</wsse:Username>
<wsse:Password Type="wsse:PasswordText">CONTOSO_PASSWORD_TOKEN</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</Property>
<Property Name="SoapHeaderXmlUserNameToken" Type="System.String">CONTOSO_USERNAME_TOKEN</Property>
<Property Name="SoapHeaderXmlPasswordToken" Type="System.String">CONTOSO_PASSWORD_TOKEN</Property>
</Properties>
</LobSystemInstance>