【WCF】リクエストに何でも受け取るメソッドを作成する|火消しに行って油を注ぐ火消しに行って油を注ぐ私の知りたいを解決するブログ。あとプログラミングのメモなど。WCF【WCF】リクエストに何でも受け取るメソッドを作成するWCFを使って社内サービスを作成していますが、ユーザーが様々なフォーマットでデータを送ってくるので困っています。引数に渡されるデータのフォーマットをあらかじめクラス定義しておけば良いのですが、渡ってくる可能性のあるフォーマットを事前にすべて把握しておく必要があるので、膨大な作業となってしまいます。クライアントからどんな形式のデータが来るか分からない場合に、サービス側でデータを判断してリクエストの振り分けが出来ないか、考えてみました。・JSON.NETのJArrayを使って配列データを操作する・JSON.NETのJTokenを使ってJSONの中身を一つずつ参照しながら全項目を取得する・【WCF】文字列で作ったJSONをサービスの戻り値として返す・RESTなWCFサービスのクロスドメイン対応WCFサービスのメソッドの引数をObject型にしてみる単純に引数の型をObject型にしてみましたが、リクエスト受信に例外が発生してしまいました。IISのログは出力されていましたが、WCFサービスのメソッド内のログ出力は動いていなかったので、メソッドの入り口で落ちたようです。System.ServiceModel.Channels.Messageサービスが引数をシリアライズする際に、Object型の中身の型を判断できないみたいです。引数ありのメソッドの汎用化は無理っぽいですね。引数なしのメソッドにしてみる引数のシリアライズで落ちるので、引数なしのメソッドにしてみました。System.ServiceModel.Channels.Messageこうすると、任意の引数で呼び出されても、通信はうまく通るようです。その代わりクライアントからどんなデータが送られて来ているのかは、リクエストの中身を直接見ないといけません。リクエストメッセージの中身を直接見る例として、クライアントからは以下のような2種類の異なるJSONデータが送られてくるとします。"渡辺"}]}サービス側ではSystem.ServiceModel.Channels.Messageを使用して、メッセージの生データを取得します。type="string">渡辺</a:item></item></a:item></root>リクエストメッセージの中身はXML形式となっているようです。後はデータの内容を判断して処理を振り分けることが出来れば、1つのメソッドで異なる型の引数の呼び出しに対応出来そう。まとめデータのフォーマットの定義は結局どこかに持っておくことになりますが、フォーマットの形式を外部ファイルやデータベースに外出しすることで、メソッドは汎用的なものが作れそうです。感じになりましたが、もっと良いやり方が見つかるまでこの方法を採用したいと思います。Next>自己紹介ヤマチヨ時代を逆行するレガシーエンジニア。末端SIerでシステムエンジニア紛いの仕事をしております。年齢を重ねるごとに加速する日々の中で、感じた事、考えた事を記録していきたいと思います。@_yamacho_人気記事ハードオフ・オフハウスで実際に売れたものまとめ。売れるもの・売れないもの。Excelのサイズが肥大化して動作が重い原因はたぶんこれ家族で大阪から福岡に帰省するなら車が楽。ヤマト便がサイズの上限を設定!重量と大きさの制限で送れないものが増えた!料金の値上げも実施!独学で地方公務員試験を受けたので、その振り返りなど(社会人経験者枠)【VB.NET】ネットワーク上のフォルダにアクセスしてユーザー/パスワード認証のダイアログを表示する5年間敷きっぱなしのカーペットをコインランドリーで洗濯しました。どんなことが聞かれるのか。