Я получил некоторую документацию от одного из наших поставщиков для веб-службы, которую они публикуют, и они очень специфичны, что на одном из своих WebMethods аргумент имеет модификатор out ( "не уверен, что это правильный дескриптор" ) например, рассмотрим следующую подпись WebMethod:
[WebMethod]
public void HelloWorld(out string strVal)
{
strVal = "Hello World";
}
[Очевидно, что фактический метод не является методом Hello World]
Теперь я никогда не думал о разработке WebMethod с аргументом out/ref, и мне стало интересно, почему они использовали его.
Пытаясь понять приложение для этого дизайнерского решения, я бросил прототип вместе с несколькими базовыми веб-способами Hello World style... один с одним строковым аргументом, один с двумя строковыми аргументами и один, который не получает никаких аргументы, но возвращает строку.
Попытка ссылаться на мои веб-методы из отдельного приложения, я замечаю, что мне нужно получить доступ к этому методу с единственным строковым аргументом точно так же, как если бы я определил метод для вывода строки так, чтобы, по сути,:
public string HelloWorld1()
{
return "Hello World";
}
и
public void HelloWorld2(out string strVal)
{
strVal = "Hello World";
}
точно совпадают... в том, что я должен ссылаться на них как на себя (где x заменен на правильный метод):
string val = HelloWorldX();
Попытавшись ссылаться на методы таким образом, я бы обращался к ним, если они не были веб-методами [например]:
string val = string.Empty;
MyService1.HelloWorld(out val);
Console.WriteLine(val);
который вызывает ошибку компиляции, в которой утверждается, что аргументы метода не принимают 1 вход. Почему это? Очевидно, что веб-метод принимает один аргумент - я смотрю на него [HelloWorld2].
После изучения ответов SOAP я замечаю, что содержание ответа для HelloWorld1:
<HelloWorld1Response xmlns="http://tempuri.org/">
<HelloWorld1Result>string</HelloWorld1Result>
</HelloWorld1Response>
И HelloWorld2
<HelloWorld2Response xmlns="http://tempuri.org/">
<strVal>string</strVal>
</HelloWorld2Response>
Идя дальше, я подумал, что, если у меня есть 2 аргумента ref...
public void HelloWorld3(out string strVal1, out string strVal2)
{
strVal1 = "Hello World";
strVal2 = "Hello World Again!";
}
Это генерирует контент SOAP:
<HelloWorld3Response xmlns="http://tempuri.org/">
<strVal1>string</strVal1>
<strVal2>string</strVal2>
</HelloWorld3Response>
Я считал достаточно справедливым, так теоретически [предоставляя возможность понять, как передать /ref аргументы в WebMethods], что означает, что я могу просто передать два аргумента, которые могут быть заданы с помощью метода, но когда я это делаю:
string val1 = string.Empty;
string val2 = string.Empty;
MyService1.HelloWorld3(out val1,out val2);
Console.WriteLine(val1);
Console.WriteLine(val2);
Я должен получить ту же ошибку компиляции, которую я видел, когда я пытался ссылаться на HelloWorld2 таким образом. С очевидным исключением, что он жалуется на 2 аргумента вместо 1 [и на самом деле я получаю одно и то же исключение, я его протестировал).
- Что дает?
- Есть ли причина или способ использования аргументов out/ref в WebMethods, которые мне не хватает?
- Если есть, как мне обратиться к WebMethods с несколькими аргументами out/ref?