misc.log

日常茶飯事とお仕事と

ASP.NET Webサービスでパラメータスタイル「Bare」を使おうとして失敗

ASP.NET Webサービスで、引数に独自のクラスを用いたWebメソッドを作成。しかし、メソッド呼び出し側から「WSDLの定義で1階層余計なタグが入るのをやめてほしい」との要望。そもそも呼び側がなんで仕様を決めるんだよ……というのもあるのですが……。一応調査。

Webメソッドの属性「SoapDocumentMethod」のプロパティで、ParameterStyleというのを「Bare」に設定すると、メソッド名タグで引数を1段包み込むというのをなしにできるようなのですが…

[SoapDocumentMethod(Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]

引数がクラスだと駄目でした……(そのままだと駄目なだけ、かも。なにか設定が足りないのかも)。

ちなみにこういうエラーが出ます。

最上位の XML 要素 'campanyInfo' が、明示型である ***.WebService.Data.***Info 
および System.String[] を参照しています。XML 属性を使用して、この要素または型の
代わりとなる別の XML 名または名前空間を指定してください。 

SOAPXMLの基礎をきちんとやらないとだめかなぁ。

Bareスタイルの設定についての具体例、QA

ASP.NET WebService without Complex Types
http://stackoverflow.com/questions/485113/asp-net-webservice-without-complex-types