繁体   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