9

次のように定義されたC#クラスがあります。

public class GenericItem<T>
{
  public List<T> Items { get; set; }

  public DateTime TimeStamp { get; set; }
} 

サーバー上にこのクラスのインスタンスを作成しています。次に、次に示すように、WCFサービスを介してネットワーク経由でそれを渡そうとしています。

[OperationContract]
public GenericItem<MyCustomType> GetResult()
{
  GenericItem<MyCustomType> result = BuildGenericItem();
  return result;
}

この時点では、すべてが正常にコンパイルされます。Silverlightアプリで「サービス参照を更新」して再コンパイルすると、次のようなコンパイル時エラーが発生します。

MyNamespace.GenericItemOfMyCustomType [extra chars]には、「GetEnumerator」のパブリック定義が含まれていません

理由はわかりません。

  1. 余分な文字が表示されています。サービス参照を更新するたびに変更されるようです。
  2. これを実際に修正する方法。

私は何が間違っているのですか?

4

4 に答える 4

10

Sleimanは正しいですが、この記事で説明されているようにBounded Genericsを使用することができ、あなたが望むことを達成できるかもしれません。これにより、サービス内でジェネリック型を作成して公開できます。ただし、サービスオペレーションでタイプが指定されているため、コンシューマーはそれを一般的なものとは見なしません。

于 2012-05-08T14:59:05.477 に答える
6

ジェネリック型パラメーターに依存するWCFコントラクトを定義することはできません。ジェネリックは.NETに固有であり、それらを使用すると、WCFのサービス指向の性質に違反します。ただし、WCFはコレクション専用のマーシャリングルールを提供しているため、データコントラクトにデータメンバーとしてコレクションを含めることができます。

于 2012-05-08T14:53:07.247 に答える
1

sleimanが指摘しているように、ジェネリックはSOAPではサポートされていません。

WCFとジェネリック医薬品-> http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/79585667-6b97-4ce4-93fa-3a4dcc7a9b86

関連する質問-> WCF。サービスの一般的なメソッド

于 2012-05-08T14:58:30.677 に答える
-6

servicereferenceを使用する代わりに、クライアント側で以下を使用できます。

var myBinding = new BasicHttpBinding();
var myEndpoint = new EndpointAddress("");
var myChannelFactory = new ChannelFactory<IService>(myBinding, myEndpoint);
IService gks = myChannelFactory.CreateChannel();

ジェネリックで動作します。

于 2014-11-19T14:09:01.653 に答える