Типы служб WCF с тем же именем типа, тем же пространством имен XSD - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть метод службы WCF, который я хочу предоставить.

Тип параметра метода службы - это базовый класс всех типов с одинаковым именем класса и пространством имен XML.

Все производные типы находятся в разных пространствах имен C #, но должны быть представлены в одном и том же пространстве имен xml.Ниже приведена реализация.

Однако произошла ошибка при попытке добавить ссылку на службу с указанием типа дубликата.

В идеале Visual Studio должна автоматически назначать пространство имен C # для второго Shape (например, Set1.Shape, Set2.Shape).Таким образом, он может загружать все типы.

Любая идея будет принята с благодарностью.

[ServiceContract]
public interface IShape
{
    [OperationContract]
    [ServiceKnownType(typeof(Set1.Shape))]
    [ServiceKnownType(typeof(Set2.Shape))]
    void GetShape(ShapeBase shape);
}

public class ShapeBase : IShape { }

//Example only. 
namespace Set1
{
    public class Shape : ShapeBase { }   
}

namespace Set2
{
    public class Shape : ShapeBase { }
}

Обновление

Я могу опубликовать их наСторона службы WCF, которая заставляет думать, что она не может сделать то же самое на стороне клиента, заключается в том, что WSDL НЕ поддерживает пространство имен в языке программирования, таком как C #.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Как сказал Ладислав, вам нужно иметь разные имена узлов в одном и том же пространстве имен XML.Вы можете связать это с помощью свойства Name DataContractAttribute:

namespace Set1
{
    [DataContract(Name="Set1Shape")]
    public class Shape : ShapeBase { }   
}

namespace Set2
{
    [DataContract(Name="Set2Shape")]
    public class Shape : ShapeBase { }
}
0 голосов
/ 22 декабря 2011

Каждый тип должен иметь уникальную комбинацию пространства имен XML и имени XML.Поэтому, если ваши типы должны находиться в одном и том же пространстве имен XML, они должны иметь другое имя элемента.В настоящее время они, скорее всего, не имеют, потому что имя типа CLR одинаково.

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