Принудительное использование прокси WCF для создания префикса псевдонима - PullRequest
3 голосов
/ 11 июня 2010

Чтобы соответствовать схеме клиентов, я пытался сгенерировать клиентский прокси WCF, способный сериализоваться до структуры с корневым узлом, который выглядит следующим образом:

<quote:request
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:quote="https://foo.com/services/schema/1.2/car_quote">

После некоторого чтенияМне повезло в обновлении прокси, чтобы включить необходимое пространство имен «quote», используя XmlNameSpaceDeclarations и XmlSerializerNamespaces

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class request
{
    [XmlNamespaceDeclarations()]
    public XmlSerializerNamespaces xmlsn
    {
        get
        {
            XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
            xsn.Add("quote", "https://foo.com/services/schema/1.2/car_quote");
            return xsn;
        }
        set
        {
            //Just provide an empty setter. 
        }
    }
    ...

, что обеспечивает:

<request
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:quote="https://foo.com/services/schema/1.2/car_quote">

однакоозадачен тем, как генерировать элемент quote: request.

Среда: ASP.NET 3.5

1 Ответ

1 голос
/ 11 июня 2010

Я не могу воспроизвести вашу ситуацию без некоторого WSDL для генерации прокси, но бит сериализации работает для меня, если я добавлю атрибут XmlRoot.

using System.Xml.Serialization;

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[XmlRoot(Namespace="https://foo.com/services/schema/1.2/car_quote")]
public partial class request
{
    get 
    {
        [XmlNamespaceDeclarations()]
        public XmlSerializerNamespaces xmlsn
        {
            XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
            xsn.Add("quote", "https://foo.com/services/schema/1.2/car_quote");
            return xsn;
        }
    } 
    set { }
}
...