VS2010 verwirrt-System.Xml.XmlElement mit System.Xml.Linq -.XElement?
Habe ich einen WCF-service mit einer Methode, die zurückgibt einen System.Xml.XmlElement
:
Schnittstelle:
[ServiceContract]
public interface IWCFService
{
[OperationContract]
XmlElement Execute(...);
}
Service:
public XmlElement Execute(...)
{
XmlNode node = ...;
return (XmlElement)node;
}
Wenn ich versuche auf den Dienst zuzugreifen, bereitgestellt auf meinem server
WCFServiceClient service = new WCFServiceClient("WSHttpBinding_IWCFService");
XmlElement node = service.Execute(...);
Bekomme ich die Fehlermeldung:
Kann nicht implizit konvertiert Typ 'System.Xml.Linq -.Xin' an ' - System.Xml.XmlElement'
Suche service-Lösung kann ich nicht finden jede Bezugnahme auf System.Xml.Linq.XElement
. Ist es falsch von mir zu erwarten, dass eine System.Xml.XmlElement
oder VS 2010 herumalbern mit mir?
- Versuchen Sie den Aufruf des Dienstes mit der wcftestclient.exe. Bekommst du irgendwelche Fehler?
- Ist dies nicht möglich, da die
wcftestclient
nicht unterstützenSystem.Xml.XmlElement
. Aber lustig genug, es nicht erwähnt nichts über dieSystem.Xml.Linq.XmlElement
. - Sehen, ob dieser Beitrag hilft : social.msdn.microsoft.com/Forums/en-US/wcf/thread/...
- Vielen Dank für Ihren Vorschlag. Obwohl sehr gut möglich, das war nicht mein Problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ich gefunden habe, funktioniert am besten und am einfachsten für mich ist, mit der rechten Maustaste auf die service reference und klicken Sie dann auf "Configure Service Reference". Einmal in der dialog-box für diesen unten sehen Sie 2 radio-buttons, die sagen, "Reuse types in allen referenzierten assemblies" oder "Reuse types in angegeben referenzierten Assemblys". Klicken Sie auf die 2. option für 'angegebenen Baugruppen. Die listbox wird dann aktiviert, und Sie können überprüfen Sie alle Baugruppen und verlassen System.Xml.Linq deaktiviert. Auf diese Weise jedes mal, wenn Sie aktualisieren Sie die service-Referenz erhalten Sie die erwarteten Ergebnisse und diese werden in der Konfiguration gespeichert der client.
1) Entfernen Sie das system.xml.linq-Referenz aus Ihrem client
2) Aktualisieren Sie Ihren service-Referenz
3) Die neu erzeugte Referenz.cs-Datei wird nun Referenz XmlElement anstelle von XElement
Ich hasse es, Antwort auf meine eigene Frage, aber hier geht es:
Soweit ich sehen kann, die
System.Xml.XmlElement
KANN verwendet werden, als eine Rückkehr geben für einen WCF-Dienst. DieDataContractSerializer
verwendet standardmäßig im WCF Unterstützung diese Art und Weise sollte es nicht nötig sein, dieXmlSerializer
.Aber mein problem hat nichts zu tun mit serialisieren, aber Dank Raj Kaimal für die Annahme dieser Möglichkeit.
Folgte ich dem WCF-tutorials von Microsoft gegeben, die sagt, dass Sie hinzufügen den WCF-service als Service Referenz, wenn Sie diesen service nutzen möchten. Dieser scheint in Ordnung zu sein in VS2008, aber beim Umschalten auf VS2010 dieser Ansatz änderungen der return-Typ von
System.Xml.XmlElement
zu den (neueren?)System.Xml.Linq.XElement
. Um dieses Problem zu lösen, müssen Sie den Dienst als Web-Referenz statt.