Wcf встроенные модели - PullRequest
       3

Wcf встроенные модели

0 голосов
/ 27 апреля 2010
[DataContract]
Base
{ 
     [DataMember]
     public int Id {get;set;}
}

[DataContract]
A : Base 
{
     [DataMember]
     public string Value {get;set;}
}

[ServiceContract]
interface IService
{
    [OperationContract]
    void SetValue (Base base);
}

есть ли способ использовать сервис, как в следующем стиле:

new Service ().SetValue (new A ());

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

Вы пометили этот WCF, поэтому я предполагаю, что вы хотите его использовать.

Вам необходимо подключиться к конечной точке, используя ChannelFactory, а затем открыть канал.

Это не будет работать:

new Service ().SetValue (new A ());

Тебе нужно что-то сделать. как это:

using (var scf = new ChannelFactory< IService >(<Binding>,<EndpointAddress>)
 {
   IService proxy = scf.CreateChannel();
   proxy.SetValue(new (A));
 }

Это вернет вам прокси-объект, который реализует интерфейс IService. Вы можете вызвать SetValue для этого объекта.

0 голосов
/ 28 апреля 2010

Помимо изменения способа вызова службы, как указано @Flo, вам также необходимо внести небольшое изменение, чтобы подготовить сериализатор контрактов данных для работы с иерархией наследования.

Самый простой способ сделать это - декорировать Base с помощью KnownTypeAttribute . Вот так

[DataContract]
[KnownType(typeof(A))]
Base
{ 
     [DataMember]
     public int Id {get;set;}
}

[DataContract]
A : Base 
{
     [DataMember]
     public string Value {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...