通用WCF包装器

时间:2013-02-07 11:55:59

标签: c# .net wcf entity-framework

我正在使用实体框架,我想通过wcf服务公开一些方法;

我有这个功能(在cs页面上)

 using (ICRMEntities oContext = RemClient.Create<ICRMEntities>())                
     oContext.FindByKey<DataLib.Models.CRM.ActivitySLA>("ActivitySLA", SLAID); 

此功能的内容是

   public static T FindByKey<T>(this IQueryable<T> oQuery, int keyValue) where T : EntityObject, ISimpleBaseClassMD
        {
            return oQuery.FindByKey<T>(keyValue, null);
        }

在WCF服务中定义的接口为:

public interface ICRMEntities : IDisposable, IContextWithUser
    T FindByKey<T>(string sObjectTypeCode, int keyValue, bool bRequestValue) where T : EntityObject, ISimpleBaseClassMD;

WCF中的这种通用方法存在问题; 如何包装此方法以保存此功能?

1 个答案:

答案 0 :(得分:3)

你不能。

您无法通过WCF服务公开泛型方法。您需要定义将要使用的类型。这是SOAP的限制。

但是,您可以创建一个基类作为返回类型,并向服务添加KnownType属性,以定义此服务可以返回的派生类。

类似的东西;

[KnownType(typeof(SomeClass))]
public interface ICRMEntities : IDisposable, IContextWithUser
    EntityObject FindByKey(string sObjectTypeCode, int keyValue, bool bRequestValue)