質問者
FileInfoを返すWebサービスのメソッドは作成可能でしょうか?

質問
-
こんにちは、さとくんパパこと古谷です。お世話になっています。
Webサービスで任意のサーバ上でしかアクセス許可されないファイル情報(FileInfoクラス)をArrayListのメンバーとしてを返すようなメソッドを作成しようとしています。
ところが、実際にやってみるとこのWebメソッドをコールする箇所で
「サーバーは要求を処理できませんでした。 --> XML ドキュメントを生成中にエラーが発生しました。 --> System.IO.FileInfo に既定のパブリック コンストラクタが含まれていないため、シリアル化できません。」
というエラー(System.Web.Services.Protocols.SoapException)が返ってきてしまいます。どうやらFileInfoクラスをシリアライズしないと上手く行かないようなのですが、どうも方法がよく分かりません。FileInfoにISerializableを実装すればよいのかと思うのですが、そのサンプルコードが上手くネット上で見つかりません。
何方か簡単にご教授願えないでしょうか?よろしくお願いいたします。
すべての返信
-
mars12さん、こんにちは、さとくんパパこと古谷です。お世話になっています。
ご指摘ありがとうございました。おっしゃる通りのやり方で既に実装を始めています。
FileInfoクラスをWebサービスの引数に戻すのは、単に自分でクラスや構造体を作って実装するより時間がかからないという安直な思想によるものです。.Net Frameworkのヘルプやネット上の各種情報には、XMLシリアル化の方法は各種満載なのですが、
・任意のクラスがWebサービスの引数や戻り値になるようにするには、何をどのようにすればよいか?
という具体例が中々見当たりません。ここら辺ちょっと知識が足りないので、どこら辺を探ればよいか教えていただければと思った次第です。因みにArrayListやHashedTableをWebサービスの引数や戻り値にするには何処等辺を調べればよいのでしょうか?追記的で申し訳ないのですが、教えていただければ幸いです。
以上、よろしくお願いいたします。
-
XMLシリアル化はバイナリシリアル化と違い少し癖があるので、私は独自の容器を必ず作成するようにしています。
それなりにMSDNの中に書かれているのですが、結構複雑な技術なので読み取りにくいとは思います。
http://msdn2.microsoft.com/ja-jp/library/system.xml.serialization(VS.80).aspx
とりあえずの入り口はここしかないですね。
-
さとくんパパ さんからの引用 .Net Frameworkのヘルプやネット上の各種情報には、XMLシリアル化の方法は各種満載なのですが、
・任意のクラスがWebサービスの引数や戻り値になるようにするには、何をどのようにすればよいか?
という具体例が中々見当たりません。ここら辺ちょっと知識が足りないので、どこら辺を探ればよいか教えていただければと思った次第です。
これは、エラーメッセージが XML シリアライズに関するものであったため、このような方向になっちゃってるんだと思いますが、根本的な問題として「リモーティング」とか「RPC」とか「Web サービス」についての基本的な知識が欠けていると思います。Web サービスについての基本的なドキュメントを読めば、任意のクラスを引数や戻り値にすることは不可能であるという大前提が、Web サービスには存在することがわかるでしょう。そうすれば、そもそも XML シリアライズ以前に、Web サービスを利用することを考え直すか、Web サービスとして作成するのであれば、Web サービスとしてのインターフェスやデータのやりとりについて考える必要があることがわかるはずです。ヘルプだと、目次→ Windows ベースのアプリケーション、コンポーネント、サービス→ マネージ コードを利用した XML Web サービスの下にある10ちょいの文章を一通り読まれると、基本は理解できるとおもいます。