.Net WebServices et arguments out / ref WebMethod

J'ai reçu de la documentation à partir de l'un de nos fournisseurs pour un webservice ils publient et ils sont très précis sur l'une de leurs WebMethods qu'un argument a le modificateur(? pas sûr si c'est le bon descripteur), par exemple, considérer les points suivants WebMethod signature:

[WebMethod]
public void HelloWorld(out string strVal) 
{ 
    strVal = "Hello World";
}

[Évidemment la méthode n'est pas un Hello World méthode]

Maintenant, je n'avais jamais considéré comme la conception d'un WebMethod avec un/ref argument et il m'a demande pourquoi ils ne l'avons utilisé.

Essayer de comprendre l'application de cette décision de conception, j'ai jeté un prototype avec un peu de basic Bonjour tout le Monde, le style de webmethods...un avec un seul argument de type chaîne, une avec deux arguments de chaîne et qui ne reçoivent pas d'arguments, mais retourne une chaîne de caractères.

Sur essayer de référencer mon webmethods à partir d'une autre application, je remarque que j'ai pour accéder à la méthode avec le seul argument de type chaîne exactement comme si je l'avais défini la méthode à la sortie de la chaîne de sorte que, en effet, aussi loin que le client est concerné:

public string HelloWorld1()
{
  return "Hello World";
}

et

public void HelloWorld2(out string strVal)
{
  strVal = "Hello World";
}

sont exactement les mêmes...dans ce que j'ai à faire référence à la fois en tant que tel [où x est remplacé par de la bonne méthode]:

string val = HelloWorldX();

Avoir tenté de référence les méthodes de la façon dont je voudrais y accéder s'ils n'étaient pas des méthodes web [comme]:

string val = string.Empty;
MyService1.HelloWorld(out val);
Console.WriteLine(val);

ce qui provoque une erreur de compilation indiquant qu'aucun des arguments de méthode accepter 1 entrée. Pourquoi est-ce? Il y a évidemment une méthode web qui accepte un argument - je suis à la recherche d' [HelloWorld2].

Lors de l'examen de la SAVON de réponses, j'ai remarqué que le contenu de la réponse pour HelloWorld1 est:

<HelloWorld1Response xmlns="http://tempuri.org/">
  <HelloWorld1Result>string</HelloWorld1Result>
</HelloWorld1Response>

Et HelloWorld2 est

<HelloWorld2Response xmlns="http://tempuri.org/">
  <strVal>string</strVal>
</HelloWorld2Response>

Allant plus loin que je pensais, ce que si j'ai 2 ref arguments...

public void HelloWorld3(out string strVal1, out string strVal2)
{
    strVal1 = "Hello World";
    strVal2 = "Hello World Again!";
}

Cela génère de la teneur en SAVON:

<HelloWorld3Response xmlns="http://tempuri.org/">
  <strVal1>string</strVal1>
  <strVal2>string</strVal2>
</HelloWorld3Response>

Je pensais juste assez, donc théoriquement [fournir je peux trouver un moyen de passer/ref arguments de WebMethods] cela signifie que je peux juste passer dans deux arguments qui peuvent être définies par la méthode, mais quand je fais ceci:

string val1 = string.Empty;
string val2 = string.Empty;
MyService1.HelloWorld3(out val1,out val2);
Console.WriteLine(val1);
Console.WriteLine(val2);

Je devrais obtenir la même erreur de compilation que j'ai vu quand j'ai essayé de faire référence à la HelloWorld2 de cette façon. À l'exception évidente qu'elle se plaint de 2 arguments au lieu de 1 [et en fait je fais la même exception, je l'ai testé].

  • Ce qui donne?
  • Est-il une raison ou une façon d'utiliser/ref arguments en WebMethods que je suis absent?
  • Si il y a, comment dois-je faire référence WebMethods avec plusieurs/ref arguments?

source d'informationauteur BenAlabaster