powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / MessageContract генерит странное namespace для элемента.
15 сообщений из 15, страница 1 из 1
MessageContract генерит странное namespace для элемента.
    #38881044
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень странное поведение у MessageContract.

У вложенного типа namespace выставляется namespace сборки, а не то, что я указал. В общем вот код, чтобы было понятней:

Вот, что получается:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
...
</s:Header>
<s:Body>
<BoolValue xmlns="http://my.site/rev2015">true</BoolValue>
<StringValue xmlns="http://my.site/rev2015">HelloWorld</StringValue>
<InnerType xmlns="http://my.site/rev2015" xmlns:a="http://schemas.datacontract.org/2004/07/Server" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:ANotherBool>true</a:ANotherBool>
<a:AnotherStringValue>AnotherHelloWorld</a:AnotherStringValue>
</InnerType>
</s:Body>
</s:Envelope>



< a: ANotherBool>, < a: AnotherStringValue> - это странно и не верно ! namespace должен быть таким-же, что и у BoolValue, StringValue, т.е. " http://my.site/rev2015"

Код код, который я использую:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
[ServiceContract(Namespace = "http://my.site/rev2015")]
[ServiceKnownType(typeof(InnerType))]
public interface IService1
{
    [OperationContract]
    CompositeType GetDataUsingDataContract(CompositeType composite);
}

[MessageContract(WrapperNamespace = "http://my.site/rev2015", IsWrapped = false)]
public class CompositeType
{
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public bool BoolValue;
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public string StringValue;
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public InnerType InnerType;
}

[MessageContract(WrapperNamespace = "http://my.site/rev2015", IsWrapped = false)]
public class InnerType
{
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public bool ANotherBool;
    [MessageBodyMember(Namespace = "http://my.site/rev2015")]
    public string AnotherStringValue;
}

// impl
[ServiceBehavior(Namespace = "http://my.site/rev2015")]
public class Service1 : IService1
{
    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {...}
}



IsWrapped = false Тоже важная штука. Без нее появляется лишний уровень вложенности.
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38881754
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что скажете ?

Интересное дело. Если вы погуглите статьи, посвященные MessageContract, то везде увидите (там где используется вложенный тип) этот баг ! Т.е. везде, во вложенном типе namespace от сборки, а не то, что указанно !
Понятно, что для целей обучения этого достаточно, поэтому никто из авторов не заморачивается.
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38881775
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek поэтому никто из авторов не заморачивается.
Похвальная самоуверенность...
:-)
Миллион программеров используют WCF в тысячах проэктов, а баг нашли вы.
:-)
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38881907
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129,

В принцип я наверное загнул. Наверное можно как-то задать namespace для вложенного типа. Но как ?
Я просто видел несколько статей, где задается namespace, и там же приводятся полученные soap'ы. И в них видно, что тоже самое проявляется, что и у меня вот. Возможно просто для никто из авторов не заморачивался, т.к. для целей статьи было достаточно показать, что namespace изменился у головного элемента. А как задать для вложенного не копали, или не заметили.

Я разные варианты пробовал. И задавать пустой namespace, и даже убирать вообще аттрибут MessageContract у вложенного типа. Пробовал подсунуть DataContract. Результат один - назначается namespace по умолчанию (или вообще элемент пропадал, если его пометить DataContract).
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882135
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У кого нибудь воспроизводится ? Или я дико ошибаюсь ?
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882665
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekУ кого нибудь воспроизводится ? Или я дико ошибаюсь ?
Теряюсь в догадках, зачем вам обязательно явно указывать неймспейс...
Почему это так странно выглядит - просто как правило, если натыкаешься на что-то, что некая технология не делает, то чаще всего это потому, что это нафиг никому не нужно - в том числе и вам.
:-)
Говорю по своему опыту.
Обчно что ни возьми - хоть WCF, хоть nHibernate - они могут такое, что и не знал, что это вообще нужно делать....
:-)
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882727
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129,

К большому сожалению это не мое требование :( Есть обязательная спецификация. WSDL нету - т.к. мне нужно разработать именно, что сервер. А посылать на него сообщения будут из Java - наверное они там это умеют делать.

Я бы с радостью отказался от этой идеи - но это не мое решение.
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882862
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekт из Java - наверное они там это умеют делать.
Скорее не умеют что-нибудь...
Кстати - я как то убрал из протокола связи проблемный и ненужный процесс (аж цельное шифрование ) когда убедил заказчиков что оно излишне. Но была возможность связаться с программерами клиента напрямую.
Если у вас есть подобное - прозвоните такую возможность.
Как там говорят самураи - "Твой наилучший бой - не начатый" , значит наилучшее решение проблемы - не решать её...
:-)
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882867
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вложенных типов вообще не нужно MessageContract указывать.
Вместо этого надо для GetDataUsingDataContract указать использование xml сериализатора (через атрибут XmlSerializerFormat).
Ну и для вложенного типа расставить XmlType и XmlElement.
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882983
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PA,

А работает ли этот подход с цифровой подписью ?
Мне нужно чтобы WCF подписывала сообщения сертификатом. Будет работать ?
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38882986
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я попробую конечно сейчас. Главное чтобы SOAP формировался верный. Ну и WCF правильно цифровую подпись прикручивал.
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #38883016
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PA,

Получилось !!! Namespace применился к вложенным элементам !

Спасибо большое :)
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #39062979
BotNikita
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProBiotek,День добрый! У меня сейчас есть точно такая же проблема, не могли бы Вы скинуть пример кода? Заранее спасибо!
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #39063914
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BotNikita,

Вот такая конструкция помогла.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[ServiceContract(Namespace = "http://my.site/rev2015")]
[XmlSerializerFormat]
public interface IService1
{
  [OperationContract]
  [XmlSerializerFormat]
  CompositeType GetDataUsingDataContract(CompositeType composite);
}

[MessageContract(WrapperNamespace = "http://my.site/rev2015", IsWrapped = true)]
public class InnerType
{
  [MessageBodyMember(Namespace = "http://my.site/rev2015")]
  public bool ANotherBool;
  [MessageBodyMember(Namespace = "http://my.site/rev2015")]
  public string AnotherStringValue;
}
...
Рейтинг: 0 / 0
MessageContract генерит странное namespace для элемента.
    #39063996
BotNikita
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProBiotek,
Я уже разобрался, спасибо большое! Я так понимаю, Вы тоже занимаетесь разработкой сервисов для СМЭВ? Если да, то не могли бы Вы дать адрес своей почты, я думаю мы могли бы быть полезны друг другу в некоторых возникающих вопросах.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / MessageContract генерит странное namespace для элемента.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]