[英]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.