Может передавать строковые значения через службу WCF, но не пользовательский объект - PullRequest
0 голосов
/ 31 марта 2011

У меня проблемы с работой службы WCF.В приведенном ниже коде я могу вызвать метод HelloWorld () моей службы, и он работает, но я не могу успешно вызвать метод GetCustomer () (он просто выводит «Address:», а не имя и адрес клиента. Кто-нибудь знает, как это может быть?Я не понимаю, почему мой сервис не передает клиентский объект клиенту. Я считаю, что я реализую то, что было показано здесь . Если кто-то может взглянуть на это, я был бы очень признателен. Заранее спасибо!

// 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 ]

2 голосов
/ 31 марта 2011

Я бы обновил сервисную ссылку. Как правило, если вы частично разработали свой класс, например, у вас изначально было:

[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 только при первом добавлении ссылки.

0 голосов
/ 04 апреля 2011

Я выяснил, в чем проблема.Я исправил это, добавив пространство имен в мой DataContract.Это означает, что я изменил

[DataContract]

на

[DataContract (Namespace = "www.myservice.com")]

и смогчтобы загрузить мой пользовательский объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...