好消息,
程序員專用早餐機。和掌櫃說 ideaam,可以節省20元。 點擊鏈接 或復·制這段描述¥k3MbbVKccMU¥后到淘♂寳♀
或者 淘寶掃碼 支持下同行哈
----------------------------------------------------------------------------------------------------------------------------
注意:本主題中的內容適用於 Microsoft Office SharePoint Server 2007 SP1。
對於 Web 服務,您可以使用 HTTP 頭或 SOAP 標頭提供有關 SOAP 消息的特定應用程序的消息;例如,您可以提供身份驗證和付款信息。在 Microsoft Office SharePoint Server 2007 SP1 中,業務數據目錄支持自定義的 HTTP 頭和 SOAP 標頭,以將用戶名和密碼信息傳送到 Web 服務調用。
HTTP 頭
業務數據目錄可以將 Microsoft Single Sign-On (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 服務中您可以直接讀取值,如以下示例所示。不過,因為用戶名和密碼未加密,所以您應該將 SSL 用於使用該功能的 Web 服務。
若要使用 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>
![]() |
---|
Web 服務器必須支持 SOAP 標頭,才能使用它們。此外,您應該在每個 SOAP 標頭的 Web 方法中添加 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; }
正如您所了解的,為執行 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; } } }