簡體   English   中英

在WCF客戶端上調用多態方法時出錯

[英]Error when calling Polymorphic method on WCF Client

此錯誤是先前問題的結果。 我正在嘗試從WCF客戶端調用多態方法。 這是我的合同:

public interface IOhmioService
{        
  [OperationContract]
  IEnumerable<Enumerador> GetEnumerador<T>() where T : IEnumerador, new();        
}

這是我的類實現:

public class OhmioService : IOhmioService
{
  public IEnumerable<Enumerador> GetEnumerador<T>() where T : IEnumerador, new()
  {
      T _obj = new T();
      return _obj.Enumerar();  
  }
}

並從客戶端這樣調用它:

public IEnumerable<Enumerador> Clients { get; set; } 
Clients = this.serviceClient.GetEnumerador<Clientes>();

如果我從類中調用此方法,則一切正常。 但是,如果我從WCF客戶端調用它,則會收到此錯誤:

非通用方法'Ohmio.Client.OhmioService.OhmioServiceClient.GetEnumerador()'不能與類型參數一起使用

我做錯了什么? 謝謝!

UPDATE

好。 我嘗試建議的解決方案,並得到此可怕的錯誤:

未使用合同名稱RuntimeType指定類型“ System.RuntimeType”: http : //schemas.datacontract.org/2004/07/System 嘗試使用DataContractResolver或將未知類型靜態地添加到已知類型列表中(例如,使用屬性KnownTypeAttribute或將它們添加到已知類型列表中以傳遞給DataContractSerializer)

畢竟,在wcf上使用泛型類型並不是一個好主意。 我試圖減少WCF服務上的重復代碼。

WCF ServiceContract不能有通用的OperationContract方法。 有關更多詳細信息,請參見此處: WCF。 服務通用方法

您需要將類型作為方法參數傳遞:

public interface IOhmioService
{        
  [OperationContract]
  IEnumerable<Enumerador> GetEnumerador(string typeName);       
}

public class OhmioService : IOhmioService
{
  public IEnumerable<Enumerador> GetEnumerador(string typeName)
  {
      var type = Type.GetType(typeName);
      var _obj = (IEnumerador)Activator.CreateInstance(type);
      return _obj.Enumerar();  
  }
}

UPDATE

見上面的更新; 傳遞類型的全限定名。 這不會導致序列化問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM