Operation Style and Message format(Web Service)
时间:2006-01-12 来源:cjsteven
Operation Style (Document/RPC) and Message format(literal/encoded)
在WSDL 1.1中, 允許兩種定義 message part 格式的方式:
1. encoded: 利用'encodingStyle'(通常是Namespace URI來表示)來作為
xml message part與後端相對應物件之間 mapping 的 typing system.
目前泛用的標準是 SOAP1.1 的http://schemas.xmlsoap.org/soap/encoding/
2. literal: 利用 XML Schema 來定義 message part 的結構及 typing.
WSDL 1.1 中定義了兩種 WebSerivce Operation 的型式: RPC 及 Document.
1. RPC (Remote Proceduce Call): 功能與 Java 中的RMI 相似, 在 SOAP Request
Message 的SOAP Body 中, 第一個 sub-element 必須與 operation 同名 (Response
的SOAP Body 中, 第一個 sub-element 則命名為 operation-name + "Response" ),
這個Operation element內包 parameter/return-value 對應的 xml element:
2. Document: 最主要的目的個人認為是在 messaging oriented document exchange.
由於是 document-oriented Service 或 messaging-oriented Service, "operation" 的感
覺較弱所以WSDL1.1 spec 允許這種 operation 的 SOAP Body 可以直接帶 message
part, 不用跟一個 operation element:
然而, 以目前來說, 不管是.NET 或 JAVA, 並沒有將這兩種 operation 的實作方式明顯
的區分, 一搬來說, 不管是 RPC Operation 亦或是 Document Operation, 後端都是以
一個 Method 來實作, 本質上都是 RPC.
Oracle 及 BEA 的 WebServices 產品也提供將一個 document style
one-way operation 對應到一個 JMS destination.
由於WSI-Basi Profile 1.0 (BP) 要求 document style 的SOAP message只能有一個
message part binding(所以像上面的例子是不被BP允許的), .NET 及 JAX-RPC1.1
將所有的 parameter part 包到一個 operation wrapper element 如同 RPC 的格式一樣:
一般的 WebServices Platfrom 都會支援 rpc-encoded, rpc-literal, 以及
document-literal 三種組合. 然而在 WSI-Basic Profile 1.0中, 明定要達到
Interoperability 必須是 literal. 在 .NET 上, 以兩個 Attribute (metadata) 來決定
Operation Style 及 message format:
在 JAX-RPC1.0 中, default 的是 encoded. JAX-RPC 1.1 之後加入 BP 的要求.
支援以'wrapped' 的方式來實作 Document style operation. 在JAVA上, 目前
一搬來說是用 WebService Tool (WSDL generation Tool) 來決定一個 method
要以 rpc-encoded, rpc-literal, 還是 document-literal 的格式在 WSDL 上呈現.
如果是使用 document-literal wrapped 的方式的話, 在
jaxrpc mapping deployment descriptor (defined in JSR109 J2EE WebServices)
上相對應的 method mapping 必須要有一個 <wrapped-element/> sub-element.
在未來的 JSR181 或 JSR224 中相信也會提供以 Attribute 的方式來指定
Operation Style 及 message format.
在WSDL 1.1中, 允許兩種定義 message part 格式的方式:
1. encoded: 利用'encodingStyle'(通常是Namespace URI來表示)來作為
xml message part與後端相對應物件之間 mapping 的 typing system.
目前泛用的標準是 SOAP1.1 的http://schemas.xmlsoap.org/soap/encoding/
2. literal: 利用 XML Schema 來定義 message part 的結構及 typing.
WSDL 1.1 中定義了兩種 WebSerivce Operation 的型式: RPC 及 Document.
1. RPC (Remote Proceduce Call): 功能與 Java 中的RMI 相似, 在 SOAP Request
Message 的SOAP Body 中, 第一個 sub-element 必須與 operation 同名 (Response
的SOAP Body 中, 第一個 sub-element 則命名為 operation-name + "Response" ),
這個Operation element內包 parameter/return-value 對應的 xml element:
1 |
<SOAP:Body> [color=red]<rpc-operation>[/color] <message-part-1><!-- mapped to a parameter-- > <message-part-2><!-- mapped to a parameter-- > [color=red]</rpc-operation>[/color] </SOAP:Body> |
2. Document: 最主要的目的個人認為是在 messaging oriented document exchange.
由於是 document-oriented Service 或 messaging-oriented Service, "operation" 的感
覺較弱所以WSDL1.1 spec 允許這種 operation 的 SOAP Body 可以直接帶 message
part, 不用跟一個 operation element:
1 |
<SOAP:Body> <message-part-1> ... <message-part-2> ... </SOAP:Body> |
然而, 以目前來說, 不管是.NET 或 JAVA, 並沒有將這兩種 operation 的實作方式明顯
的區分, 一搬來說, 不管是 RPC Operation 亦或是 Document Operation, 後端都是以
一個 Method 來實作, 本質上都是 RPC.
Oracle 及 BEA 的 WebServices 產品也提供將一個 document style
one-way operation 對應到一個 JMS destination.
由於WSI-Basi Profile 1.0 (BP) 要求 document style 的SOAP message只能有一個
message part binding(所以像上面的例子是不被BP允許的), .NET 及 JAX-RPC1.1
將所有的 parameter part 包到一個 operation wrapper element 如同 RPC 的格式一樣:
1 |
<SOAP:Body> [color=red]<document-operation-wrapper-message-part>[/color] <sub-element-1><!-- mapped to a parameter-- > <sub-element-1><!-- mapped to a parameter-- > [color=red]</document-operation-wrapper-message-part>[/color] </SOAP:Body> |
一般的 WebServices Platfrom 都會支援 rpc-encoded, rpc-literal, 以及
document-literal 三種組合. 然而在 WSI-Basic Profile 1.0中, 明定要達到
Interoperability 必須是 literal. 在 .NET 上, 以兩個 Attribute (metadata) 來決定
Operation Style 及 message format:
1 |
[color=red]C#[/color] [SoapRpcMethodAttribute( "http://foo.com/Rpc", RequestNamespace="http://foo.com", ResponseNamespace="http://foo.com")] public Address Rpc(Address address, bool useZipPlus4) { … [SoapDocumentMethod("http://foo.com/DocumentWrappedLiteral", RequestNamespace="http://foo.com", ResponseNamespace="http://foo.com", Use=SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] public string DocumentWrappedLiteral(Address1 address, bool useZipPlus4) { |
在 JAX-RPC1.0 中, default 的是 encoded. JAX-RPC 1.1 之後加入 BP 的要求.
支援以'wrapped' 的方式來實作 Document style operation. 在JAVA上, 目前
一搬來說是用 WebService Tool (WSDL generation Tool) 來決定一個 method
要以 rpc-encoded, rpc-literal, 還是 document-literal 的格式在 WSDL 上呈現.
如果是使用 document-literal wrapped 的方式的話, 在
jaxrpc mapping deployment descriptor (defined in JSR109 J2EE WebServices)
上相對應的 method mapping 必須要有一個 <wrapped-element/> sub-element.
在未來的 JSR181 或 JSR224 中相信也會提供以 Attribute 的方式來指定
Operation Style 及 message format.
相关阅读 更多 +