Unterstützung benutzerdefinierter HTTP- und SOAP-Header
Letzte Änderung: Freitag, 16. April 2010
Gilt für: SharePoint Server 2010
Inhalt dieses Artikels
HTTP-Header
SOAP-Header
Benutzerdefinierte SOAP-Header
Bei Webdiensten können Sie mithilfe von HTTP- oder SOAP-Headern anwendungsspezifische Informationen zur SOAP-Nachricht bereitstellen, wie z. B. Authentifizierungs- und Zahlungsinformationen. BDC unterstützt benutzerdefinierte HTTP- und SOAP-Header zum Übergeben von Benutzernamen und Kennwörtern an Webdienstaufrufe.
HTTP-Header
BDC kann die Benutzernamen und Kennwörter, die im Anbieter für einmaliges Anmelden gespeichert sind, als HTTP-Header an Webdienstaufrufe senden. Die HTTP-Headerwerte (Benutzernamen und Kennwörter) sind Base-64-codiert. Deshalb müssen diese Werte im Webdienst decodiert werden. Außerdem sollten Sie SSL für die Webdienste verwenden, von denen dieses Feature genutzt wird, da Benutzernamen und Kennwörter nicht verschlüsselt sind.
![]() |
---|
Die Webdienstbindung sollte die HTTP-Übertragung unterstützen. Beachten Sie, dass dies nur zum Senden von HTTP-Headern, nicht aber für SOAP-Header erforderlich ist. |
Für die Verwendung von HTTP-Headern müssen Sie die folgenden Änderungen in der Anwendungsdefinitionsdatei vornehmen:
Legen Sie die SecondarySsoApplicationId-Eigenschaft des LobSystemInstance-Elements auf die Zielanwendungs-ID der Anwendung für einmaliges Anmelden fest, die den Benutzernamen und das Kennwort enthält.
Legen Sie für die Eigenschaften HttpHeaderUserName und HttpHeaderPassword der Methode die entsprechenden Headernamen fest, die vom Webdienst erwartet werden.
Beispiel
<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-Header
BDC kann die Benutzernamen und Kennwörter, die in den Einstellungen für einmaliges Anmelden gespeichert sind, auch als SOAP-Header an Webdienstaufrufe senden. Die SOAP-Headerwerte (Benutzernamen und Kennwörter) sind nicht Base-64-codiert. Deshalb können Sie diese Werte wie im folgenden Beispiel gezeigt direkt lesen. Sie sollten jedoch SSL für die Webdienste verwenden, von denen dieses Feature genutzt wird, da Benutzernamen und Kennwörter nicht verschlüsselt sind.
Für die Verwendung von SOAP-Headern müssen Sie die folgenden Änderungen in der Anwendungsdefinitionsdatei vornehmen:
Legen Sie die SecondarySsoApplicationId-Eigenschaft des LobSystemInstance-Elements auf die Zielanwendungs-ID der Anwendung für einmaliges Anmelden fest, die den Benutzernamen und das Kennwort enthält.
Legen Sie die folgenden Eigenschaften des Method-Elements fest:
SoapHeaderUserNameMemberName: Der SOAP-Header-Benutzername, den der Webdienst versteht.
SoapHeaderUserNameMemberFieldName: Der Name des Felds, das den Benutzernamen enthält.
SoapHeaderPasswordMemberName: Der Name des SOAP-Header-Kennworts, das der Webdienst versteht.
SoapHeaderPasswordMemberFieldName: Der Name des Felds, das das Kennwort enthält.
![]() |
---|
BDC unterstützt auch das Festlegen des Benutzernamens und des Kennworts in einem einzigen SOAP-Header. Für SOAP-Header, die sowohl einen Benutzernamen als auch ein Kennwort unterstützen, sind die Metadateneigenschaftenwerte für SoapHeaderUserNameMemberName und SoapHeaderPasswordMemberName identisch. |
Beispiel
<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>
![]() |
---|
Der Webserver muss SOAP-Header unterstützen, damit sie verwendet werden können. Darüber hinaus sollten Sie der Webmethode für jeden SOAP-Header das SOAP-Attribut hinzufügen. Im folgenden Codebeispiel wird dies verdeutlicht. |
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;
}
Wie Sie wissen, generiert BDC zum Ausführen von Webmethoden einen Proxy. Falls von der Back-End-Webmethode SOAP-Header unterstützt werden, sieht der generierte Proxy wie im folgenden Codebeispiel aus.
![]() |
---|
Im folgenden Beispiel wird nur der relevante Code gezeigt. |
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; }
}
}
Benutzerdefinierte SOAP-Header
Sie können benutzerdefinierte SOAP-Header mit einer beliebigen Stereotypmethode für ein bestimmtes LobSystemInstance-Element hinzufügen. Bei benutzerdefinierten SOAP-Headern werden die Benutzernamen- und Kennworttoken von BDC durch die in Secure Store Service gespeicherten Werte ersetzt. Wenn im Modell benutzerdefinierte SOAP-Header angegeben sind, überprüft BDC nicht, ob diese SOAP-Header im Webdienst verfügbar sind. Beachten Sie, dass sich dieses Verhalten von der Verwendung von SOAP-Headern unterscheidet, bei denen für BDC die SOAP-Header im Webdienst definiert werden müssen.
Für die Verwendung von benutzerdefinierten SOAP-Headern müssen Sie die folgenden Änderungen in der Anwendungsdefinitionsdatei vornehmen:
Legen Sie die SecondarySsoApplicationId-Eigenschaft des LobSystemInstance-Elements auf die Zielanwendungs-ID der Anwendung für einmaliges Anmelden fest, die den Benutzernamen und das Kennwort enthält.
Fügen Sie dem LobSystemInstance-Element die SoapHeaderXml-Eigenschaft hinzu. Die SoapHeaderXml-Eigenschaft gibt gegenüber BDC an, dass benutzerdefinierte SOAP-Header mit jedem Aufruf an den Webdienst gesendet werden müssen.
Der Inhalt der SoapHeaderXml-Eigenschaft besteht aus den Benutzernamen- und Kennwortheadern in dem Format, das vom Webdienst verstanden wird. Die Werte des Benutzernamens und des Kennworts werden durch Token dargestellt. Sie werden später beim Abrufen dieser Werte aus Secure Store Service von BDC ersetzt, bevor die Anforderung an den Webdienst gesendet wird.
Legen Sie die Werte der Eigenschaften Username und Password in der SoapHeaderXml-Eigenschaft auf das Token fest, das später durch BDC ersetzt werden soll.
Legen Sie den Wert der SoapHeaderXmlUserNameToken-Eigenschaft auf das Token fest, mit dem der Wert für den Benutzernamen im benutzerdefinierten SOAP-Header ersetzt werden soll.
Legen Sie den Wert der SoapHeaderXmlPasswordToken-Eigenschaft auf das Token fest, mit dem der Wert für das Kennwort im benutzerdefinierten SOAP-Header ersetzt werden soll.
Im folgenden Beispiel sind diese Eigenschaften in der Anwendungsdefinitionsdatei dargestellt.
<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>