我无法让我的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();
}
}
答案 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”)]
我可以下载自定义对象。