可以将任何类对象作为参数的 WCF 方法


public interface ICommunicationLoggService
{
    [OperationContract]
     bool SaveLog(Employee emp);
}

我需要上述方法作为通用方法,以便它可以将任何类对象作为参数,而不是针对特定的 Employee 对象。

就像我有3节课

class Employee
{
}
class Student
{
}
class Address
{
}

现在,当我打电话给saveLog()时,它应该根据类进行。

我的英语不好,希望任何人都能理解这个问题并为我提供解决方案。

更新

经过一些研究,我得出的结论是,SOA 在这些接口中不使用泛型似乎是最好的选择。

因此,最简单的解决方案似乎为每个实体类型都有一个单独的日志方法。

public interface ICommunicationLoggService
{
    [OperationContract]
    bool SaveLog(Employee emp);
    [OperationContract]
    bool SaveLog(Studend emp);
    [OperationContract]
    bool SaveLog(Address emp);
}

选项 2

您还可以将低音类用于"可记录"类型。

public interface ICommunicationLoggService {
  [OperationContract]
  bool SaveLog(Loggable loggable);
}
public class ComunicationLoggerService : ICommunicationLoggService {
  public bool SaveLog(Loggable loggable) {
    return false;
  }
}
public class Loggable { }
public class Employee : Loggable { }
public class Studend : Loggable { }
public class Address : Loggable { }
public class Example 
{
  public void Foo() 
  {
    Employee employee = new Employee();
    ICommunicationLoggService loggService = new ComunicationLoggerService();
    loggService.SaveLog(employee);
  }
}

旧零件

您可以使用泛型来实现所需的行为。不应在 WCF 中使用泛型。我一开始就没有意识到这一点。

感谢卡米洛·特雷维托(Camilo Terevto(的解释,为什么使用泛型是不好的:

问题出在 WSDL。不能序列化不序列化的类型 知道的

public interface ICommunicationLoggService
{
    [OperationContract]
    bool SaveLog<TEntity>(TEntity emp);
}

最新更新