2013-03-13 2 views
0

У меня есть небольшая проблема с переносом подклассов с WCF. Я хочу создать общий класс «обратной связи» и подклассифицирован из обратной связи: Succes-class и Failure-class (ошибка имеет код ошибки и описание). Это должно позволить клиенту сделать что-то вроде этого:Передача подклассов с WCF

If (myWCFclient.authenticate(user, password) is Succes) 
{ 
.. 
} 

В моей WCF datacontracts, я определил это так:

[DataContract] 
public class Feedback : IFeedback 
{ 
} 

[DataContract] 
public class Succes : Feedback 
{ 
} 

[DataContract] 
public class Failure : Feedback 
{ 
    [DataMember] 
    public int errorCode { get; set; } 
    [DataMember] 
    public String description { get; set; } 
} 

Это работает очень хорошо, мои рабочие контракты выглядеть следующим образом:

Но в моем приложении «клиент», где я получаю эти классы, я только нахожу «Обратная связь» как класс, «Succes» и «Failure» нигде не найдены.

enter image description here

ли знает кто-нибудь, что я делаю не так? Должен ли я определять классы «Succes» и «Failure», разные в моих DataContracts, потому что они подклассифицируют «Обратная связь»?

Заранее спасибо.

ответ

0

Прокси-генератор выравнивает структуру классов на стороне клиента. Некоторые способы обойти это:

Shared Library

Создание общей библиотеки между клиентом и сервером, так что вы не должны генерировать прокси. Это может быть не «чистый» подход к услугам, но по крайней мере вам не нужно генерировать прокси-серверы каждый раз.

Частичные классы

Клиентская часть прокси созданы как разделяемые классы. Вы можете создавать интерфейсы и реализовывать их в дополнительном файле частичного класса.

Пример:

public partial class MyProxy : IFeedback 
{ 
    //you won't have to add code here if the members of IFeedback line up with your data member names.  
} 
5

Есть несколько способов решения этого. Я думаю, что следующий способ является лучшим для вас:

[DataContract]  
[KnownType(typeof(Success))] 
[KnownType(typeof(Failure))] 
public class Feedback : IFeedback 
{ 
} 

смотри также MSDN reference

+0

Очень приятно, это действительно работает, спасибо за ссылки MSDN, мне очень помог. –

+0

Вы можете отметить ответ и закрыть вопрос. – Slava

Смежные вопросы