2010-07-23 7 views
1

J'ai un paramètre complexe à une méthode Web dans mon service Web .NET et je souhaite interroger cette méthode Web avec Report Builder 2.0 using SOAP. Avec soapUI, je reçois la requête SOAP suivante pour cette méthode web:permet de convertir cette requête SOAP en requête Report Builder 2.0 pour la source de données XML

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:qcr="MyNamespace"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <qcr:MyWebMethod> 
     <qcr:MyComplexParameter><!--Represents a serializable class--> 
      <qcr:Action>?</qcr:Action><!--string--> 
      <qcr:ActionSortAscending>?</qcr:ActionSortAscending><!--Boolean--> 
      <qcr:ActionSortOrder>?</qcr:ActionSortOrder><!--int--> 
     </qcr:MyComplexParameter> 
     </qcr:MyWebMethod> 
    </soapenv:Body> 
</soapenv:Envelope> 

Le seul type de rapport Builder 2 requêtes J'ai travaillé avec avant étaient des méthodes Web qui ont des chaînes, des entiers, ou d'autres types simples comme paramètres. Comment pourrais-je écrire un Report Builder 2 query pour cette requête SOAP?

Sample Report Builder 2 requête pour la méthode Web avec des paramètres simples:

<Query> 
    <Method Name="MyWebMethod" Namespace="MyNamespace"> 
    <Parameters> 
     <Parameter Name="MyStringParameter"><DefaultValue>foo</DefaultValue></Parameter> 
     <Parameter Name="MyNumericParameter"><DefaultValue>3</DefaultValue></Parameter> 
    </Parameters> 
    </Method> 
    <ElementPath IgnoreNamespaces="true">MyWebMethodResponse {}/MyWebMethodResult {}/Result</ElementPath> 
</Query> 

Répondre

0

Le meilleur que je suis venu avec était de changer la méthode Web de service Web de sorte qu'il ne prend des paramètres simples, puis trouver un moyen de représenter l'objet complexe dans une chaîne et l'analyse de celle dans la méthode web. Les paires clé-valeur et regex, les chaînes JSON, etc. Cela ne fonctionnerait pas si je n'avais pas de contrôle sur le code du service web, et il semble vraiment qu'il devrait y avoir un moyen de passer n'importe quel type de paramètre sérialisable Builder vers un service Web XML. Si je peux passer un paramètre dans une requête SOAP normale, je devrais pouvoir passer le paramètre via la syntaxe stupide Query du Générateur de rapports.

Si elle aide quelqu'un d'autre, pour l'analyse des paires clé-valeur séparées par des virgules du format key1=value1,key2=value2, j'ai utilisé new Regex(@"([^=,]*)=(""[^""]*""|[^,""]*)") et paramStr.Split(',').Select(pair => pair.Split('=')).ToDictionary(pair => pair[0], pair => pair[1]) pour obtenir un IDictionary<string, string> de paramètres dans mon C# service Web.