Stworzyłem najprostszą usługę internetową w C#:Jak skompilować schemat korzystający z DataSet (xs: schema)?
public void AddData(DataSet ds)
Wygenerowany schematu (WSDL) wygląda następująco:
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema">
...
<s:element ref="s:schema" />
...
</s:schema>
Uwaga schemat nie zawiera żadnych import/zawierać elementy.
Próbuję załadować ten schemat AC# System.Xml.XmlSchema i dodać go do System.Xml.XmlSchemaSet:
var set = new XmlSchemaSet();
var fs = new FileStream(@"c:\temp\schema.xsd", FileMode.Open);
var s = XmlSchema.Read(fs, null);
set.Add(s);
set.Compile();
Ostatnia linia generuje ten wyjątek:
The 'http://www.w3.org/2001/XMLSchema:schema' element is not declared.
To ma sens: Schemat generowany przez .Net używa typu "s: schema", który jest zadeklarowany w schemacie, który nie jest importowany.
- Dlaczego .Net tworzy niepoprawny schemat?
- Jak skompilować schemat mimo to? Skoro tak, to pobierz schemat w wersji http://www.w3.org/2001/XMLSchema i dodaj go również do XmlSchemaSet. To nie działało, ponieważ ten schemat online zawiera definicję DTD. Musiałem ręcznie usunąć i teraz wszystko działa. Czy to ma sens, czy coś mi brakuje?
Nie, to znaczy, że usługa zwraca 'DataSet'. To nie jest dobry pomysł. Jak można oczekiwać, że klient Java poradzi sobie z 'DataSet'. Zasadniczo nie należy używać żadnych typów specyficznych dla .NET w umowie usługi internetowej. –