on reduced CLR
昨日のmono meetingでちょっと話に上がったCLRの削られた奴について、ちょっとだけフォローアップ。
昨日ほとんど話をしなかったHosting APIのコアとなるSystem.Silverlight.dllには、SoapHttpClientProtocolっていうクラスがあって、これはSystem.Web.Services.Protocols.SoapHttpClientProtocolと似たような使われ方をしている(つまり派生クラスを定義してWebサービスのラッパーにすることが出来る)。で、これがSOAPをしゃべるのかというと、実はそんなことはないらしい。実のところXML Schemaはサポートされていない*1し、WSDLもSOAPも当然サポートされていないわけで、SOAPをまともな意味でしゃべるのは無理だ。このクラスは、実際にはASP.NET AjaxでサポートされるJSON + System.Web.Servicesなサービスとのやり取りをするのに使われるらしい。
Windows専用のSilverlight SDKにはslwsdl.exeというツールが入っているのだけど、これは(full) CLRの機能を使っている*2ので、余所のWSDLからproxyクラスを生成してくれる。ただしSL SoapHttpClientProtocolでサポートされている範囲は限られているので、たとえばAmazon Web ServicesのWSDLを食わせても、何も出力してくれない(wsdl.exeではでかいコードが生成される)。
もうひとつ。ASP.NETはサポートされないのだけど、これはサーバ技術なので、Silverlightアプリケーションみたいなもので使う意義はもともと無い(はず)。ADO.NETについては使い道があるといえばあるけど(DataSet)、まあ必須とはとても言えない機能だろう。
そんなわけで、SilverlightではCLRの機能はたくさん削られていて、不便に感じる人は多いかもしれないけど、僕はポジティブに評価できるのではないかと思う。*3