Suporte para personalizar HTTP e SOAP cabeçalhos
Observação: O de conteúdo neste tópico se aplica ao Microsoft Office SharePoint Server 2007 SP1.
Com Serviços da Web, você pode usar cabeçalhos HTTP ou SOAP cabeçalhos para fornecer informações Application-specific sobre o mensagem SOAP; de exemplo, você pode fornecer autenticação e informações de pagamento. Em Microsoft Office do SharePoint Server 2007 SP1, o Business Data Catalog suporta cabeçalhos personalizado HTTP e SOAP cabeçalhos para passar Nome usuário e senha informações para chamadas serviço da Web.
Cabeçalhos HTTP
O Business Data Catalog pode enviar o nome usuário e senha armazenadas nas configurações aplicativo serviço Microsoft Single Sign-On (SSO) HTTP cabeçalhos às chamadas serviço da Web. Os valores cabeçalho HTTP, isto é, nome usuário e senha, são de base 64 codificado. Portanto, no serviço da Web, você precisa decodificar os valores. Você também deve usar SSL para os serviços da Web que usam esse recurso como valores nome e senha de usuário não são criptografados.
Para usar cabeçalhos HTTP, você deve fazer o seguinte alterações no arquivo de definição de aplicativo:
Defina o SecondarySSOAppID SecondarySSOAppID do elemento LobSystemInstance LobSystemInstance como a identificação de aplicativo corporativo o SSO em Office SharePoint Server 2007 que contém o nome usuário e senha.
Defina as propriedades HttpHeaderUserName HttpHeaderPassword do método com os nomes respectivo cabeçalho que espera a serviço da Web e HttpHeaderPassword.
Exemplo
<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>
Cabeçalhos SOAP
O Business Data Catalog também pode enviar o nome usuário e senha armazenadas nas configurações de SSO cabeçalhos SOAP para serviço da Web chamadas. Os valores cabeçalho SOAP (nome usuário e senha) não são de base 64 codificado. Para que no serviço da Web, você possa ler os valores diretamente como mostrado no seguinte exemplo. No entanto, você deve usar SSL para os serviços da Web que usam esse recurso como valores nome e senha de usuário não são criptografados.
Para usar cabeçalhos SOAP, faça o seguinte alterações no arquivo de definição de aplicativo:
Defina o SecondarySSOAppID SecondarySSOAppID do elemento LobSystemInstance LobSystemInstance com a identificação de aplicativo corporativo o SSO em Office SharePoint Server 2007 que contém o nome usuário e senha.
Definir o seguinte propriedades do elemento Method método:
SoapHeaderUserNameMemberName: O nome de usuário o nome cabeçalho SOAP que compreenda a serviço da Web.
SoapHeaderUserNameMemberFieldName: Nome do campo que contém o nome usuário.
SoapHeaderPasswordMemberName: Nome de cabeçalho SOAP que entende o serviço da Web a senha.
SoapHeaderPasswordMemberFieldName: Nome do campo que contém a senha.
Dica
O Business Data Catalog também oferece suporte à configuração de usuário nome e senha em um único cabeçalho SOAP.Para cabeçalhos SOAP que suporte tanto nome usuário e senha, os valores propriedade metadados para SoapHeaderUserNameMemberName e SoapHeaderPasswordMemberName são os mesmos.
Exemplo
<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>
Importante
O servidor Web deve cabeçalhos SOAP suporte para poder usá-los.Além disso, você deve adicionar SOAP atributo para o método da Web para cada cabeçalho SOAP.O exemplo de código a seguir mostra isso.
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;
}
Como você sabe, para executar métodos da Web, o Business Data Catalog gera um proxy. Se o método da Web back-end oferecer suporte a cabeçalhos SOAP, o proxy que é gerado parece a seguinte exemplo de código.
Dica
O seguinte exemplo mostra apenas a codificar relevante.
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; }
}
}