ServiceKnownTypeAttribute が WSDL にポップアップ表示されない
-
19-09-2019 - |
質問
サービスインターフェイスがあります:
[ServiceContract]
[ServiceKnownType(typeof(Models.ArticleImage))]
public interface IPhotoManagementService
{
[OperationContract]
bool Login(string username, string password);
[OperationContract]
bool IsLoggedIn();
[OperationContract]
void UpdateImage(string articleID, string selectedImage);
}
ご覧のとおり、ServiceContract で typeof(Models.ArticleImage) を指定しています。
したがって、このサービスの WSDL を構築すると、WSDL に ArticleImage がポップアップ表示されるはずです。残念ながら、これはまったく起こりません。何故ですか?
ArticleImage には DataContract が含まれています。そして、インターフェースで ArticleImage を返すと、WSDL は ArticleImage を取得します。
編集:使用側プロジェクトのサービス参照にもポップアップしません。
これは多くのテストの結果です。
- 追加しようとしているモデルは LINQ to SQL モデルです。
- ServiceKnownType を使用して通常のモデルを追加すると、機能します。
- インターフェイスで LINQ to SQL エンティティを使用すると、機能します。
- ServiceKnownType を介して LINQ to SQL エンティティを追加しても、ポップアップしません。
解決
なぜそれがする必要があるでしょうか?どこにあなたのサービスには、の可能性のArticleImage
だろうか?
あなたのコメント日時; [ServiceKnownType]
を使用した場合、余分なtrypeはまだ(「svcutil」を経由して消費)「MEX」にさらされている - はなく、WSDLによります。あなたは、WCFクライアントを使用していますか? (それがなかった...私はちょうどチェックした)表示されます。一般的に、しかし、ウェブサービスから漠然としたデータを返すことは素晴らしいアイデアではありません...サブタイプ、確認してください! Dictionary<string,ArticleImage>
あるいはDictionary<string,SomeBaseType>
([KnownType]
などで)、罰金!しかしobject
、HashTable
、など - は良いアイデア(IMO)ではありません。
また、単にすべてのシナリオで作業(およびWSDLなどのために簡単なこと)になるあなたのタイプ(List<ArticleImage>
)のののリストを返すことがあります。そして、クライアントはその末尾に辞書を作ってみよう。
LINQツーSQLに関して; 「MEX」のためのオブジェクトが[DataContract]
/ [DataMember]
で飾らする必要があります。あなたはDBMLのための「連載」プロパティを切り替えることによって設計された中でこれを行うことができます。このセット(シリアルモード=単方向)で、それは動作するはずです。しかし、正直に言うと、私はあなただけのAPIに明示的な型を作るダミーメソッドを追加し、より良いオフすることだと思います。
他のヒント
サービス契約業務の入力/出力パラメータとして使用のみのタイプがWSDLで公開されています。