2013-02-07 69 views
0

我正在使用實體框架,我想通過wcf服務公開一些方法;通用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中這個泛型方法的問題; 如何包裝這個方法來保存這個功能?

回答

3

你不行。

無法公開通過WCF服務的通用方法。您需要定義將使用的類型。這是SOAP的限制。

但是,你可以創建一個基類返回類型,並添加KnownType屬性的服務來定義它的派生類此服務可以返回。

東西相似;

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