3

次のように、コントラクトで 100 を超える ServiceKnownType を使用する WCF インターフェイスが動作しています。

[ServiceKnownType(typeof(RowUser))]
[ServiceKnownType(typeof(RowRegion))]
[ServiceKnownType(typeof(RowDocument))]
[... loads more ...]
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IServiceBrowse : IDisposable
{
  [OperationContract]
  void Insert(Row satz);
}

実行時にこれらの ServiceKnownTypes を提供する方法はありますか?
これらすべての ServiceKnownTypes をソースに追加するのは、エラーが発生しやすく面倒なだけでなく、アセンブリが好きではない方法で結合されたままになります (これらの型をサブアセンブリに抽出して分離できるようにしたいと考えています。ただし、サービスはすべての既知のタイプをリストする必要があるため、できません)。

4

1 に答える 1

11

はいあります。

ServiceKnownTypeAttribute を使用すると、最初のパラメーターとしてメソッド名を指定し、その後にそのメソッドを実装する System.Type を含むパラメーターを指定できます。

指定されたメソッドは、静的かつパブリックである必要があり、IEnumerable の戻り値の型を持つ必要があります。

[ServiceKnownType("RegisterKnownTypes", typeof(Services))]
public class Services : IServices
{
    static public IEnumerable<Type> RegisterKnownTypes(ICustomAttributeProvider provider)
    {
    }
}

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspxも参照してください

于 2010-06-15T09:57:27.507 に答える