複数のデータコントラクトを使用するWCFで公開されているサービス契約がいくつかあります。サービスはAdobe Flexで使用されます。私は、Flexがサーバーで生成されたWSDLを消費するという多くの問題に遭遇しました。私はhereの手順を使用して、WSDLを1つのファイルに圧縮しました(問題があれば、WcfExtrasではなくFlatWsdlを使用していました)。WCF:すべてのデータ変換で同じ名前空間を使用する必要がありますか?
VS2010の独自のwsdl.exeツールを使用してメタデータを抽出すると、エラーが発生します。具体的には、私は次のエラーを取得しています:
1) Schema validation warning: Schema item 'complexType' named
'ArrayOfKeyValueOfSomeKeySomeValuep1alXzIb' from namespace
'http://schemas.microsoft.com/2003/10/Serialization/Arrays' is invalid.
Namespace 'http://My/Wcf/Namespace' is not available to be referenced
in this schema.
2) Schema validation warning: Schema item 'complexType' named 'MyComplexType'
from namespace 'http://My/Wcf/Namespace' is invalid. Namespace
'http://schemas.datacontract.org/2004/07/My.Real.Namespace' is not available
to be referenced in this schema.
を今、私のWSDLによってインポートされていない辞書(「ArrayOfKeyValueOf ...」)型が明らかに外部スキーマで定義されているが、。 SomeKeyとSomeValueにはMy/Wcf/Namespaceのdatacontract名前空間があります。
MyComplexTypeに関しては、私がDatacontract-namespaceを自分のサービス、サーバー、およびバインディングで使用されているのと同じ名前空間に変更すると、error(2)がなくなります。なぜ私は理解できません。
私は何を求めていることは二つの質問に沸く:
1)どのように私は私のWSDLに外部スキーマのインポートディレクティブを追加することができますか?私はコンテナの周りにラッパークラスを書くことを提案するいくつかのソリューションをオンラインで見た。これは私が本当に避けたいものです。
2)本当にすべてのデータ集計を単一の名前空間に入れる必要がありますか?私はそれに技術的な異論はありませんが、すべてのdatacontractsの名前空間を変更するのは非常に面倒です。おそらくこれを達成するための自動化された方法がありますか?
TIA!
これはあなたの質問には答えませんが、これらのサービスがAdobe Flexでのみ使用できるように設計されている場合は、Webサービスから切り替えて、WebORBまたはFlourineFXを使用してAMFプロトコルに移行することを強くお勧めします。それ以外に、ServiceCaptureのようなツールを使用して、どのデータが前後に送信されているか把握していますか?サービスを利用するためのFlexコードは何ですか? – JeffryHouser
私はこれが一つの方法だと考えていますが、かなり再設計されています。ご覧のように、サービスはもともとはC#で消費されることを意図していましたが、最近ではFlexへ移行しました。また、サードパーティの開発者が他の開発者とやりとりできるよう、標準的な方法でサービスを公開したいと考えています。 – telewin
私はキャプチャツールを使用していません。あなたはそこに何が見えますか?私はWSDLの外観を知っていて、wsdl.exeは壊れていると主張しています。あなたは、ワイヤを盗聴することでさらなる洞察が得られると思いますか? Flexでサービスをどのように消費するかについては、Flexの「Webサービスのイントロスペクション」機能を使用したかったのです。言い換えれば、私たちは単純なWebサービスとしてサービスを利用したいと考えています。 – telewin