@Botalov_Nikita

Как правильно указывать namespac'ы в WCF-сервисах?

При разработке SOAP сервисов возникла такая проблема. Все сообщения (XML), входящие или исходящие, имеют следующую структуру
0323b04c9c604331a3727626e83891e2.png

Например:
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns5:cancelBookingResponse xmlns:ns2="http://epgu.rtlabs.ru/equeue/ws/types/" xmlns:ns3="http://smev.gosuslugi.ru/rev120315" xmlns:ns4="http://www.w3.org/2004/08/xop/include" xmlns:ns5="http://epgu.rtlabs.ru/equeue/ws/"><ns3:Message><ns3:Status>RESULT</ns3:Status></ns3:Message><ns3:MessageData><ns3:AppData><ns5:bookId>710019_2</ns5:bookId><ns5:status><ns2:statusCode>201</ns2:statusCode><ns2:statusMessage>Отозвано</ns2:statusMessage></ns5:status></ns3:AppData></ns3:MessageData></ns5:cancelBookingResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>


Таким образом, базовые контракты (AppDada, Message и т.д.) всегда имеют постоянный namespace. При разработке я хотел реализовать базовые классы, от которых бы уже наследовал контракты для определенных случаев.

/// <summary>
    /// 
    /// </summary>
    [DataContract(Namespace = "http://epgu.rtlabs.ru/equeue/ws/")]
    public class AppDataBase
    {
    }
    [DataContract]
    public class AppDataInCancelBooking : AppDataBase
    {
        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        public string BookId { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        public string EsiaId { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        public string Password { get; set; }
    }

Но в этом случае, непонятно как указывать namespace у DataMember’ов.
Если же вместо DataContract использовать MessageContract, то, когда мы используем экземпляр этого MessageContract в качестве MessageBodyMember, то namespace у этого MessageBodyMember почему-то не наследуется.
В общем как-то так. Если кто знает, как это лучше реализовать, прошу помочь.
  • Вопрос задан
  • 392 просмотра
Пригласить эксперта
Ответы на вопрос 1
Splo1ter
@Splo1ter
.NET Developer (9 years+)
Не вариант просто ссылку на WCF сервис добавить в Visual Studio, она вам сама сгенерит классы ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы