|
分類:[C#]
はじめまして、お世話になります。 Yahoo知恵袋にも質問させて頂いてるのですが、せっぱつまっているのでこちらにも質問させて下さい。
C#でSOAPサーバーを作ろうとしています。 他社が設計したxsdファイルがあり、それを取り込んで作っているのですが、choice要素がうまく処理できず困っています。ちょっと言葉足らずかもしれませんがご了承願えればと存じます。
概要としては、 parent(complex)のメンバーとして、 typeA要素から派生したAというchoice要素があり そのメンバーに、typeBとtypeCというcomplexタイプがあるとします。
c#にxsdを取り込むと自動で下記のようなclassが生成されます。 (不要と思われる属性は割愛して表記しております)
[System.Xml.Serialization.XmlIncludeAttribute(typeof(typeB))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(typeC))] [System.SerializableAttribute()] public abstract partial class A : typeA { }
サーバーメソッドの処理の中では、
typeB B = new typeB(); parent.A = B;
などとして処理しておりますが、構文エラーなく正常に処理されているようです。
ところが、サーバーメソッドを抜けると下記エラーが発生します。
---- 型 'System.ServiceModel.CommunicationException' のハンドルされていない例外が mscorlib.dll で発生しました
追加情報:http://localhostほにゃらら/ に対する HTTP 応答の受信中にエラーが発生しました。この原因としては、サービス エンドポイント バインドが HTTP プロトコルを使用していないことが考えられます。また別の原因として、HTTP 要求コンテキストがサーバーによって中止された可能性もあります (サーバーがシャットダウンした場合など)。詳細についてはサーバー ログを参照してください。 ----
クライアントはサーバーが自動生成してくれるwsdlを取り込んで作っていますが、 wsdlを確認したところ、上記のchoice要素だったAはchoice要素ではなく、 通常のcomplex型(typeA型)として定義されていました。
質問をまとめますと、 ・すでに定義されたxsdファイルがありchoice要素が含まれている ・それに基づいてC#でSoapサーバーを作りたい ・サーバークライアントでやり取りできるようにchoice要素を扱うにはどうしたらよいか
という感じです。
言葉足らずでわかりづらいかも知れませんが、 みなさまのお知恵をお貸しください。
|