Указание наследования в WCF XmlSchema - PullRequest
0 голосов
/ 30 марта 2011

Я столкнулся с ситуацией, когда мне нужно реализовать IXmlSerializable для типа данных, который я отправлю через службу WCF. Но когда я пытаюсь пометить базовый класс в xsd, ссылка на службу больше не может быть обновлена, и тип, который я пишу для xsd для «not found». Вот XSD:

<xs:schema 
xmlns:tnsg="http://schemas.datacontract.org/2004/07/MyNS" 
elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/MyNS" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:base="http://schemas.datacontract.org/2004/07/BaseNS">
  <xs:complexType name="MyType">
    <xs:extension base="base:BaseType">
        <xs:sequence>
            <xs:element name="BProperties">
              <xs:complexType>
                <xs:sequence>
                  <xs:element minOccurs="0" name="BInfo" nillable="true" type="xs:string" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="AProperties">
                <xs:complexType >
                    <xs:sequence>
                      <xs:element minOccurs="0" name="AStuff" nillable="true" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:extension>
  </xs:complexType>
  <xs:element name="MyType" nillable="true" type="MyType" />
</xs:schema>"

Вот C #:

public static XmlQualifiedName GetMySchema(XmlSchemaSet xs)
{
   XmlSchema s =  XmlSchema.Read(new StringReader(xsd), (sender, eargs) => {  });
   xs.Add(s);
   return new XmlQualifiedName("MyType", "http://schemas.datacontract.org/2004/07/MyNS");
}

Я полагаю, мне нужно как-то импортировать BaseType?

EDIT: Я пробовал

  var baseschemes = xs.Schemas("http://schemas.datacontract.org/2004/07/MyBase");
  foreach (XmlSchema item in baseschemes)
  {
      s.Includes.Add(item);
  }

добавляет одну схему (как и ожидалось), но ничего не меняется!

1 Ответ

0 голосов
/ 30 марта 2011

Проблема в том, что ваш текущий WSDL не сообщает клиенту, где найти схему с targetNamespace, равным "http://schemas.datacontract.org/2004/07/BaseNS".. Вы должны либо включить в свой WSDL другой элемент, который содержит полную схему для этого пространства имен, либо предоставить который ссылается на статический XSD с ним.

...