可以通过WCF服务但不是自定义对象传递字符串值

时间:2011-03-30 20:58:16

标签: wcf

我无法让我的WCF服务正常运行。在下面的代码中,我可以调用我的服务的HelloWorld()方法并且它可以工作,但我不能成功调用GetCustomer()方法(它只打印“地址:”,而不是客户名称和地址。任何人都知道这可能是什么?我不明白为什么我的服务没有将客户对象传递给客户端。我相信我正在实现所显示的内容here。如果有人可以看一看,我会非常感激。请提前感谢!< / p>

// Service Interface:
[ServiceContract(Namespace="http://www.myservice.com")]
public interface IAddressService
{
  [OperationContract]
  string HelloWorld();

  [OperationContract]
  Customer GetCustomer();
}

// Service:
public class AddressService : IAddressService
{
  public string HelloWorld()
  {
    return "Hello World";
  }

  public Customer GetCustomer()
  {
    return new Customer() 
    { 
      Id = 1, 
      Address = "1212 Forest Lane Irving TX", 
      FirstName = "Vladamir"
    };
  }
}


// Customer class (my custom data object):
[DataContract] 
public class Customer
{
  private int id;
  private string address;
  private string firstName;

  [DataMember]
  public int Id
  {
    get { return id; }
    set { id = value; }
  }

  [DataMember] 
  public string Address
  {
    get { return address; }
    set { address = value; }
  }

  [DataMember]
  public string FirstName
  {
    get { return firstName; }
    set { firstName = value; }
  }
}

//Client code:
class Program
{
  static void Main(string[] args)
  {
    EndpointAddress epa = new EndpointAddress("http://localhost:8000/AddressService/AddressAppService");
    IAddressService service = ChannelFactory<IAddressService>.CreateChannel(new BasicHttpBinding(), epa);

    Console.WriteLine(service.HelloWorld());
    Customer c1 = service.GetCustomer();
    Console.Write(c1.FirstName + " Addresss: " + c1.Address);

    Console.WriteLine("Press <ENTER> to exit the client.");
    Console.ReadLine();
  }
}

2 个答案:

答案 0 :(得分:2)

我会更新服务参考。通常,如果您已经部分设计了自己的课程,例如你最初有:

[DataContract]
public class Customer
{
    [DataMember]
    public string Address { get; set; }
}

在类型处于此状态时添加了服务引用,但随后又添加了一些属性:

[DataContract]
public class Customer
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Address { get; set; }
}

...如果您不更新服务引用(来自客户端代码),那么您的数据合同将仅描述首次添加引用时Customer类型的形状。

答案 1 :(得分:0)

我发现了问题所在。我通过将命名空间添加到我的DataContract来修复此问题。这意味着我改变了

[DataContract]

[DataContract(Namespace =“www.myservice.com”)]

我可以下载自定义对象。