2012-03-02 2 views
2

Я работаю над сервисом WCF в VB. Меня спросили, что мои DTO находятся в разных пространствах имен. Вот пример с двумя классами:Пространство имен в DataContract WCF

Первый класс:

Namespace DTO 
    Namespace SaveContext 

     <DataContract(Namespace:="MyProject/DTO", Name:="Reply")> _ 
     Public Class Reply 

     'Members and methods of my first class 

     End Class 

    End Namespace 
End Namespace 

Второй класс:

Namespace DTO 
    Namespace ClearContext 

     <DataContract(Namespace:="MyProject/DTO", Name:="Reply")> _ 
     Public Class Reply 

     'Members and methods of my second class 

     End Class 

    End Namespace 
End Namespace 

Когда я пришел, чтобы создать объект, все в порядке. Вот пример:

Dim saveReply As New DTO.SaveContext.Reply 
Dim clearReply As New DTO.ClearContext.Reply 

Но когда я пришел, чтобы сделать тестовый проект, чтобы проверить мое обслуживание, нет пространства имен не появляется, и положили мои два класса одинаков. Intellisence перейдет в мой первый класс с именем Reply, а второй класс с именем Reply1, в то время как я хотел иметь ту же иерархию с моими классами. Поэтому мне интересно, можно ли это сделать? Я с нетерпением жду ваших ответов. Заранее благодарю вас за внимание.

ответ

1

WCF разрешает вам «столкновение имен» класса. Вы определяете два отдельных класса C# в одном пространстве имен XML, поэтому генератор WSDL WCF правильно маркирует их как отдельные схемы XML. Поведение, которое вы видите, - это то, что Microsoft любит говорить «по дизайну». Возможно, вам действительно нужно использовать наследование и KnownTypes для вашего сценария.