2014-10-22 22 views
0

SOAP 1.1封裝沒有命名空間前綴有效嗎?沒有命名空間前綴的SOAP 1.1封裝是否有效?

我在.Net中開發了ASMX web服務。那給我打電話和發送郵件格式是這樣出站的客戶:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://myCustomNamespace.com/">     
 
    <soapenv:Header/>              
 
    <soapenv:Body>               
 
    <web:Test/> 
 
    </soapenv:Body> 
 
</soapenv:Envelope>

正確處理。這個問題開始時,客戶端,在下面的格式IBM的鑄鐵送包膜下運行:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">    
 
    <Body>                
 
     <Test xmlns="http://myCustomNamespace.com/" /> 
 
    </Body> 
 
</Envelope>

段與http://www.w3.org/TR/2000/NOTE-SOAP-20000508/相關3.與XML的關係

一SOAP應用程序應該在其生成的消息中包含SOAP中定義的所有元素和屬性上的適當SOAP名稱空間。 SOAP應用程序必須能夠處理它收到的消息中的SOAP命名空間。它必須丟棄具有不正確命名空間的消息(參見4.4節),並且它可以在沒有SOAP命名空間的情況下處理SOAP消息,就像它們具有正確的SOAP命名空間一樣。

與所有相關的是,它是否期望從我身邊處理這兩個請求?

回答

1

示例消息是完全命名空間限定的 - 它只是使用空前綴(標準中錯誤地命名爲「默認命名空間」的功能)。

通過將XML讀入DOMDocument並查看節點的.nameSpace屬性,您可以輕鬆驗證每個節點是否具有命名空間限定的事實。

如果事情變得棘手的是身體條目的子節點,如果相應的WSDL指定元素形式爲「未限定」或者應用了標準編碼規則(「名稱爲包含它們的本地名稱的訪問者具有非限定元素名字;所有其他人都有合格的名字。「)。

在這種情況下,使用空前綴(「默認命名空間」)的要求身體進入兒童被明確定性爲沒有命名空間:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">    
    <Body>                
     <foo xmlns="some-URI"> 
     <result xmlns="">meow</result> 
     </foo> 
    </Body> 
</Envelope> 

否則,他們將繼承最近的封閉默認命名空間的命名空間並因此未通過驗證。

不符合名稱空間限定的SOAP信封是一個不同的水壺。 SOAP 1.1說:

一個SOAP應用程序應該包括適當的SOAP名稱空間的所有元素和屬性由SOAP在它生成的消息定義的屬性。 SOAP應用程序必須能夠處理它收到的消息中的SOAP命名空間。它必須丟棄具有不正確命名空間的消息(請參閱第4.4節)和,它可以在沒有SOAP命名空間的情況下處理SOAP消息,就好像它們具有正確的SOAP命名空間。

換句話說:你必須處理

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">    
    <Body>                
     <foo xmlns="some-URI"/> 
    </Body> 
</Envelope> 

,你可能處理

<Envelope> 
    <Body>                
     <foo xmlns="some-URI"/> 
    </Body> 
</Envelope> 
相關問題