2011-11-18 37 views
6

我使用SOAPServer在php中創建了一個web服務。它期望看到帶有用戶名和密碼元素的SoapHeaderUsernameToken。當我在請求中包含這個頭部時,一切實際上都正常。只需在Soap處理程序類中定義一個名爲「UsernameToken」的方法,就會調用此方法,並將stdClass Obj傳遞給它。然後我可以通過$Obj->username$Obj->password驗證用戶。如何在WSDL中要求認證Soap Header?

我不知道要添加到WSDL文件中以便首先定義此UsernameToken標頭,以及如何在WSDL中指示它是必需的?

我讀過某處,新的SOAP標準已棄用「必需」標題的概念。

任何關於如何至少表明的建議是我的wsdl請求應該包含這個頭?

+1

您可以添加鏈接到您已閱讀的地方,新的SOAP標準已棄用「必需」標題的概念嗎? – hakre

+1

您能否顯示您當前的WSDL? – jap1968

回答

3

這裏是一個WSDL指定登錄的例子:https://ws1.webservices.nl/soap_doclit?wsdl

<binding name="Webservices.nlBinding" type="tns:Webservices.nlPortType"> 
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
<operation name="login"> 
<soap:operation soapAction="https://ws1.webservices.nl/soap_doclit.php/login" style="document"/> 
<input> 
<soap:body use="literal"/> 
<soap:header message="tns:Headers" part="HeaderLogin" use="literal"/> 
<soap:header message="tns:Headers" part="HeaderAuthenticate" use="literal"/> 
</input> 
+2

您的回答實際上並未回答以下問題:「如何在WSDL中表明它是必需的?」畢竟畢竟是票價的起點。 –

1

長的答案。見this的帖子。

在客戶端中,您可以使用mustUnderstand屬性來指示標頭條目對於要處理的收件人是必需的還是可選的。如果服務器不能或不想處理一個強制的頭部,它必須向客戶端拋出一個SOAP錯誤。