WCF and Interfaces

本文关键字:Interfaces and WCF | 更新日期: 2023-09-27 18:03:01

可能重复:
在WCF服务中传递接口?

我有一个关于WCF和接口的问题。

我有两节课

public interface ICompany {
  string Name { get; set; }
  IAddress Address { get; set; }
}
class Company : ICompany {
  public string Name { get; set; }
  public IAddress Address { get; set; }
}
public interface IAddress {
  string Road { get; set; }
}
class Address: IAddress {
  string Road { get; set; }
}

我的服务返回

[OperationContract]
    Company GetCompany(String name);

但这不起作用,我确信问题是Company类中的IAddress,但这难道不能以某种方式解决吗?

WCF and Interfaces

您的类必须声明为:

[DataContract]
class Company {
  [DataMember]
  public string Name { get; set; }
  [DataMember]
  public IAddress Address { get; set; }
}

并且您的服务声明并实现为:

[ServiceContract]
public interface ICompanyService
{
   [OperationContract]
   Company GetCompany(string name);
}
public class CompanyService : ICompanyService
{
  public Company GetCompany(string name)
  {
     return new Company { Name = name};
  }
}

只有在那之后你才能使用这项服务。我建议阅读更多

我认为您需要先用[DataContract]和[DataMemebr]标记需要由客户端使用的类,然后再标记。

您需要在想要序列化的类和方法上使用[DataContract]和[DataMemebr]属性。WCF将把响应序列化为XML(大部分时间(,因此编译器必须能够序列化对象。