“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
code:
1
| XmlDocument xml = webservice.getXmlDocument(); |
als ik dit aanroep krijg ik al een compiler error dat de return value een XmlNode is in plaats van een XmlDocument. Ik heb het dus op dit moment ook echt zo simpel als het hier staat. Omdat het eerst niet werkte heb ik in de webmethod ook alle code verwijderd die het XmlDocument zou moeten vullen en ik doe ook geen bewerkingen in mijn applicatie op het XmlDocument.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Hmmm, kun je de exacte error dan misschien geven?
Gaat het ook fout als je alleen de method implementeert en hem niet aanroept?
XmlDocument is wel een extension van de XmlNode class, dus eigenlijk is een XmlDocument instantie ook een XmlNode object. Maar omdat je hier toch expliciet het type XmlDocument gebruikt (en als return type opgeeft) lijkt me het gewoon juist wat je doet...
Gaat het ook fout als je alleen de method implementeert en hem niet aanroept?
XmlDocument is wel een extension van de XmlNode class, dus eigenlijk is een XmlDocument instantie ook een XmlNode object. Maar omdat je hier toch expliciet het type XmlDocument gebruikt (en als return type opgeeft) lijkt me het gewoon juist wat je doet...
Error:
Cannot implicitly convert type 'System.Xml.XmlNode' to 'System.Xml.XmlDocument'
En als ik de methode niet aanroep dan krijg ik geen foutmelding. Als ik neerzet
dan krijg ik ook geen error. Maar als ik hem dan probeer te casten naar XmlDocument dan krijg ik een invalid cast exception. Ik heb even in de soap messages gekeken en bij de defenitie van het return type van de methode staat ook
daar geeft hij dus aan dat het return type xml is en niet dat het een XmlNode of een XmlDocument is dus ik denk dat visual studio die defenitie leest en automatisch denkt dat het een XmlNode is of iets in die richting. Ik heb ook geprobeert om als parameter een XmlDocument mee te geven en dan heb ik bij de webservice hetzelfde probleem dan begint hij ook te klagen dat het een XmlNode is in plaats van een XmlDocument.
Cannot implicitly convert type 'System.Xml.XmlNode' to 'System.Xml.XmlDocument'
En als ik de methode niet aanroep dan krijg ik geen foutmelding. Als ik neerzet
code:
1
| XmlNode node = webservice.getXmlDocument(); |
dan krijg ik ook geen error. Maar als ik hem dan probeer te casten naar XmlDocument dan krijg ik een invalid cast exception. Ik heb even in de soap messages gekeken en bij de defenitie van het return type van de methode staat ook
code:
1
2
3
4
5
6
7
8
9
10
11
12
| HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope //wat irrelevante info weggehaald voor layout>
<soap:Body>
<getXmlDocumentResponse xmlns="http://tempuri.org/">
<getXmlDocumentResult>xml</getXmlDocumentResult>
</getXmlDocumentResponse>
</soap:Body>
</soap:Envelope> |
daar geeft hij dus aan dat het return type xml is en niet dat het een XmlNode of een XmlDocument is dus ik denk dat visual studio die defenitie leest en automatisch denkt dat het een XmlNode is of iets in die richting. Ik heb ook geprobeert om als parameter een XmlDocument mee te geven en dan heb ik bij de webservice hetzelfde probleem dan begint hij ook te klagen dat het een XmlNode is in plaats van een XmlDocument.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ik heb geen ervaring met SOAP in .NET, dus verder kan ik er niet zo veel over zeggen. Het lijkt me overigens geen fout van Visual Studio.
Misschien dat iemand anders er wat meer in ziet?
Misschien dat iemand anders er wat meer in ziet?
Nee ik denk ook niet dat het een fout is van visual studio want de compiler staat daar los van want die hoort gewoon bij het framework. Ik denk dat ik maar een andere manier ga zoeken om het xml document over te sturen. Ik ga wel proberen een XmlNode over te sturen en dan zelf in de applicatie in een nieuwe XmlDocument te hangen.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Dus het is een XmlNode wat je krijgt. Aangezien XmlNode zelf een abstract class is moet het object dat je terug krijgt van het type van een van de derived classes van XmlNode zijn:rwb: En als ik de methode niet aanroep dan krijg ik geen foutmelding. Als ik neerzet
code:
1 XmlNode node = webservice.getXmlDocument();
dan krijg ik ook geen error.
code:
1
2
3
4
5
6
| XmlAttribute XmlDocument XmlDocumentFragment XmlEntity XmlLinkedNode XmlNotation |
Dat is op zich wel logisch, je kunt niet casten naar een specifieker type (XmlNode -> XmlDocument).Maar als ik hem dan probeer te casten naar XmlDocument dan krijg ik een invalid cast exception.
waarom zou dit niet kunnen. Je moet alleen wel eerst even controleren of het echt wel een specefieker type is.Op maandag 15 juli 2002 15:46 schreef tomato het volgende:
Dat is op zich wel logisch, je kunt niet casten naar een specifieker type (XmlNode -> XmlDocument).
code:
1
2
| object test = "test"; string test2 = (string)test; |
hier cast ik ook naar een specefieker type (object -> string)
en dat werkt ook gewoon. Inderdaad als een instantie van XmlNode zou zijn die hij returned dan zou het inderdaad niet kunnen. Maar volgens mijn methode specificatie zou het wel degelijk een XmlDocument moeten zijn. Maar als ik dus het volgende doe
code:
1
| getXmlDocument() is XmlDocument |
levert dat ook false op. Wat er dus op wijst dat het return type geen XmlDocument is. Maar het vreemde is dat ik dat wel zo gedeclareerd heb. Ik heb nog even gekeken welk type XmlNode het is dat ik terug krijg door het te printen. En ik krijg dus een XmlElement terug in plaats van een XmlDocument.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Pardon me for talking nonsenserwb: waarom zou dit niet kunnen. Je moet alleen wel eerst even controleren of het echt wel een specefieker type is.
Da's natuurlijk juist wat je met een cast doet
Ah, die is via XmlLinkedNode derived van XmlNode...En ik krijg dus een XmlElement terug in plaats van een XmlDocument.
foutje ken natuurlijk gebeuren.Op maandag 15 juli 2002 16:13 schreef tomato het volgende:
[..]
Pardon me for talking nonsense
Da's natuurlijk juist wat je met een cast doet
inderdaad. Op zich klopt het allemaal behalve dat hij geen XmlDocument terug geeft maar een XmlElement. Als ik zelf dan weer een XmlDocument aanmaak en dan met appendChild die XmlElement probeer toe te voegen dan krijg ik een exception dat dat element uit een andere document context komt en dat dat niet mag.Ah, die is via XmlLinkedNode derived van XmlNode...
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Pagina: 1