問題に困っています... WCFサービスから単一のwsdlドキュメントを生成する方法を見つけようとしています。つまり、外部ドキュメントへのリンクがありません。 FlatWsdl を使用してすべてのxsd:importリンクを削除しましたが、生成されたwsdlにはwsdl:import宣言を介した外部wsdlドキュメントへのリンクが含まれています。
<wsdl:import namespace="http://myurl/mynamespace"
location="http://myserver/myservice.svc?wsdl=wsdl0"/>
このドキュメントには実際にはすべてのインライン化されたxsdスキーマが含まれているので、単一のwsdlを持つために、この外部wsdlドキュメントもインライン化する方法はありますか?
どんな助けにも感謝します。
(編集:FlatWSDLに関する以前の回答は削除されました。あなたが指摘したように、wsdl:importではなくxsd:importを削除することでした。)
このブログ記事を見てください: WCFで生成されたWSDLを制御
"... 1つのターゲット名前空間URIに対して常に1つのWSDLが生成されます..."
ServiceContract、DataContract、ServiceBehaviorなどの名前空間は異なりますか?
これを.net 4.5(ベータ)でネイティブに実行できるようになりました。単一のwsdlドキュメントですべてを出力するようにサービスに指示するためのオプション(?wsdlではなく?singleWsdl)があります。新しいものの詳細はこちら: http://msdn.Microsoft.com/en-us/library/dd456789(v = vs.110).aspx
単一のWSDLファイルを作成する拡張機能があるWCFExtrasプロジェクトを使用することもできます。
WCFExtras
Soapヘッダーサポート、WSDLドキュメントなどを含む、便利なWCF拡張機能のコレクション。
WCFプラットフォームは非常に拡張性が高く、コア製品の一部ではない機能を簡単に追加できます。このプロジェクトには、WCFベースのプロジェクトで必要な拡張機能がいくつか含まれています。
- WCFのSOAPヘッダーサポート
- ソースコードXMLコメントからのドキュメント
- オーバーライドSOAPアドレスロケーションURL
- 古いSOAPツールとの互換性を高めるための単一のWSDLファイル。
私の問題はエンドポイント定義にありました。これはtempuri.org名前空間にあり、bindingNamespaceをエンドポイント宣言に追加すると問題が解決します。助けてくれてありがとう:)
これは遅い答えですが、いくつかのWCFサービスで同じ問題が発生しました。以前の回答のように.NET 4.5を使用している場合は?singleWSDLを使用しますが、.NET 4.5をターゲットにしていない場合は、web.configに以下を追加して問題を修正します...
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add port="80" scheme="http" />
<add port="443" scheme="https" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
これはあなたの行動に入ります。そうすれば、すべての参照がMyServerではなくMyURLを参照するため、WSDLをフラット化する必要がなくなりました。
これが同様の問題を持つ他の人を助けることを願っています。
いくつかの追加の動作などを追加する必要があります。
こちらの記事をご覧ください。
http://my-tech-talk.blogspot.com/2008/07/adding-flatwsdl-to-wcf-webservice.html
http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx
これを実現する方法はいくつかあります。
マーク
上記のジムの回答に加えて、C#コードを使用してWCF ServiceHostを直接構成する場合:
using System.ServiceModel.Configuration;
serviceHostを設定する場合:
UseRequestHeadersForMetadataAddressBehavior urh = new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);
この情報をオンラインで簡単に見つけるのに苦労しました。うまくいけば、同様の状況で誰かを助けます。