Указание наследования в WCF XmlSchema

Я столкнулся с ситуацией, когда мне нужно реализовать 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?

РЕДАКТИРОВАТЬ: я пытался

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

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

1 ответ

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

Другие вопросы по тегам