0

WCF サービスを介して送信するデータ型に IXmlSerializable を実装する必要がある状況に直面しています。しかし、xsd で基本クラスをマークしようとすると、サービス参照を更新できなくなり、xsd に書いている型が「見つかりません」と表示されます。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 つ追加しますが (予想どおり)、何も変わりません!

4

1 に答える 1

0

問題は、現在の WSDL が、「http://schemas.datacontract.org/2004/07/BaseNS」の targetNamespace を持つスキーマを見つける場所をクライアントに伝えていないことです。この名前空間の完全なスキーマを含む別の要素を WSDL に含めるか、静的 XSD を参照する を提供する必要があります。

于 2011-03-30T13:05:48.383 に答える