| 

.NET C# Java Javascript Exception

1
Hallo NG,

ich habe von einem wsdl File eine cs classe mit dem wsdl.exe erstellen lassen.

Leider habe ich mit dem erzeugten Code in einer Methode Probleme.
Die Methode GetAllowedDomains gibt die class PoCDomains zurück:

[System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:omaadmin/", RequestNamespace="urn:omaadmin", ResponseNamespace="urn:omaadmin", Use=System.Web.Services.Description.SoapBindingUse.Literal)]
[return: System.Xml.Serialization.XmlElementAttribute("domains")]
public PoCDomains GetAllowedDomains(string domain) {
object[] results = this.Invoke("GetAllowedDomains", new object[] {
domain});
return ((PoCDomains)(results[0]));
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:omaadmin")]
public partial class PoCDomains : Array {
}

So wie ich es sehe ist die Rückgabe von System.Xml.XmlElement[] array
Wie komme ich an die in diesem array liegenden Daten??
Ich finde keinen length um die Größe des arrays zu ermitteln und mir ist nicht bekannt wie ich an die einzelen Daten komme.
In einer vorherigen Version hatte diese Methode ein string [] zurück gegeben. Unter

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.1432")]

Danke für jeden Hinweis und Tipp.

Grüße Ingo
12.09.2012
ingo 122 1 6
Floyd 14,6k 3 9
3 Antworten
1
Dem zweiten Code-Snippet zufolge ist PoCDomains von Array abgeleitet und müßte somit wie ein solches zu verwenden sein - d.h. insbesondere eine Eigenschaft Length (mit großem 'L'!) haben und mit foreach iterierbar sein.

Hilft Dir das? Ich verstehe ehrlich gesagt nicht, was Du mit dem Satz
So wie ich es sehe ist die Rückgabe von System.Xml.XmlElement[] array
sagen willst.

Update (nach den Ergänzungen in Deiner Antwort):
OK, sieht so aus, als hättest Du ein ähnliches Problem, wie es in diesem Thread diskutiert wurde. D.h. die Basisklasse von PoCDomains ist gar nicht wie von mir angenommen System.Array, sondern eine generierte Klasse namens Array, die vermutlich genau so aussieht wie in dem Post. Wäre interessant zu wissen, wie das XML-Schema in der WSDL aussieht, dass den Generator zu diesem Konstrukt veranlasst. Jedenfalls: wenn Du Dir sicher bist, dass da letztlich ein String-Array transportiert wird, würde ich auf das in Any angebotene XmlElement[] zugreifen:
PoCDomains dom = Pmc.GetAllowedDomains(domain);
foreach (var item in dom.Any)
{
string poCDomain = item.Value;
//...
}

Ich tippe mal darauf, dass die WSDL es hergeben würde, dass in PoCDomains ganz verschiedene Sachen stehen können. Über die verschiedenen Properties der generierten Array-Klasse könnte der Client sich dann erst mal orientieren, was da eigentlich empfangen wurde. Aber wenn Du "von außen" dieses Wissen schon mitgeben kannst, müßte es eigentlich auch so gehen. Und wenn Du PoCDomains an mehreren Stellen brauchst, könntest Du (dank "partial class") den generierten Teil um einen handgeschriebenen Teil erweitern, der ein string[] oder ein IEnumerable<string> mit der eigentlichen Nutzlast per Property bereitstellt.

Wenn das nicht klappt, dann poste mal den relevanten Ausschnitt aus der WSDL und ein Beispiel für einen SOAP-Body der Response bei diesem Service.
12.09.2012
Matthias Hlawatsch 13,2k 4 9
0
Hallo Matthias,

da liegt ja mein Problem.

PoCDomains dom = Pmc.GetAllowedDomains(Domain);
for (int i = 0; i < dom.Length ; i++)

Aber die class PoCDomains hat kein Lenght.
Die class hat nur:
Any, AnyAttr, arrayType, href, id, offset und offsetSpecified als properties.
Deshalb komme ich nicht an die Daten heran welche die SOAP mir liefern soll.
Als ich das Wsdl unter VS2008 erzeugt habe bekam ich ein String[] zurück.
Hier konnte ich wie in dem unteren Beispiel auf die Werte zugreifen

for (int i = 0; i < dom.Length ; i++)
{
if (dom[i] == strDomane)
{
//do somethink
}
}

Grüße Ingo
13.09.2012
ingo 122 1 6
Floyd 14,6k 3 9
Siehe dazu das Update meiner Antwort.
Matthias Hlawatsch 14.09.2012
0
Hallo Matthias,

Danke für die Hilfe. Jetzt klappt alles.

Grüße Ingo
14.09.2012
ingo 122 1 6

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH