ものがたり(旧)

atsushieno.hatenablog.com に続く

クライアントによるレスポンスの処理

さて、クライアントはHttpRequestChannel.Request()を通じてMessageを応答として受け取ることになる。HTTPレスポンスとなるストリームは、そのContent-Typeによって、適切な解析フォーマットが選択され、それに基づいて処理される。

もしWebMessageEncodingBindingElementにWebContentTypeMapperが設定されていれば、その GetMessageFormatForContentType()によって、解析フォーマットが選択される。設定されていなければ、 application/jsonであればJSON、application/xmlであればXML…といったように決定される。

フォーマットが選択されたら、それに合わせて適宜XmlReaderが生成される。Xmlであれば通常のXmlReaderであり、JSONであれば JsonReaderWriterFactoryが使用される。また、WebBodyFormatMessagePropertyが設定される。

Messageが生成されたら、今度はそれがIClientMessageFormatter.DeserializeReply()に渡される。この時もフォーマットに応じて、XmlObjectSerializerが適宜生成される(DataContractSerializer / DataContractJsonSerializer)。これによってデシリアライズされた結果が、クライアント側のランタイムメソッドの結果として返される。