質問

私は私の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>

しかし、それはSOA / MEXの意図を破る -

あなたがアセンブリの共有(すなわち、同じサービス契約アセンブリは、クライアントであるのサーバー)を使用するならば、これが起こらないことに注意してください。しかし、非常に多くのアプローチが使用されている - 。したがって、IDEがそれを直接サポートし、スイッチを介してコマンドライン(svcutil /reference

<時間> あなたはクラスライブラリ(DLL)でのサービス契約およびデータコントラクトを書く場合は、

IDEの場合は...それをサポートして、アセンブリ参照を追加します(つまり、DLLの参照またはプロジェクト参照)2からこのライブラリへプロジェクト(サーバープロジェクトとクライアントプロジェクト)。今、サーバエンドポイント(.SVC)にクライアントプロジェクトからのサービス参照のを追加します。あなたはVS2008を使用している場合は、自動的なタイプのローカル参照をチェックし、プロキシ生成の代わりにそれらを使用します - 意味:あなたのクライアントコードはすでになどIwcfServerSync使用するかどうかを知っているクラスライブラリから<=>を使用しています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top