WCFでのHashSet
-
20-08-2019 - |
質問
私は私のWCFインターフェイスでのHashSetを使用しています。
[ServiceContract]
public interface IwcfServerSync
{
[OperationContract]
void Test(HashSet<int> someHashSet);
}
iはサービス参照を作成するときにHashSetの[]は整数になります。
私はServiceKnownTypeを追加します:
[ServiceKnownType(typeof(System.Collections.Generic.HashSet<int>))]
と、いくつかの設定を試してみましたが、かなりそれを変更することができなかった。
私はハードコーディングされたすべての作品が、それは更新それを毎回変更するには本当に迷惑なんだ、それを変更した場合、私の参照..
私はおそらく何か間違ったことをやっている、任意のポインタやアイデア?
解決
コレクションが簡略化されています。あなたは、IDEとコマンドライン(svcutil /collectionType
)を経由して、コレクション型を指定することができますが、それはAPIののすべてののコレクションに適用されます。私はあなたがそれを受け入れ、コードの不一致を扱うべきだと思います。最終的には、ワイヤ上で、コレクションは、(少なくとも標準バインディング、オーバー)XMLだけです - 何かます:
<items>
<item ...>...</item>
<item ...>...</item>
<item ...>...</item>
</items>
- それはアレイ間(スキーマから)言うことができない、したがって理由(T[]
)、List<T>
、HashSet<T>
、およびMyFunkyCollection<T>
あなたがアセンブリの共有(すなわち、同じサービス契約アセンブリは、クライアントであるとのサーバー)を使用するならば、これが起こらないことに注意してください。しかし、非常に多くのアプローチが使用されている - 。したがって、IDEがそれを直接サポートし、スイッチを介してコマンドライン(svcutil /reference
)
IDEの場合は...それをサポートして、アセンブリ参照を追加します(つまり、DLLの参照またはプロジェクト参照)2からこのライブラリへプロジェクト(サーバープロジェクトとクライアントプロジェクト)。今、サーバエンドポイント(.SVC)にクライアントプロジェクトからのサービス参照のを追加します。あなたはVS2008を使用している場合は、自動的なタイプのローカル参照をチェックし、プロキシ生成の代わりにそれらを使用します - 意味:あなたのクライアントコードはすでになどIwcfServerSync
使用するかどうかを知っているクラスライブラリから<=>を使用しています