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