【发布时间】:2008-12-18 23:08:59
【问题描述】:
我从我们的一个供应商那里收到了一些他们正在发布的 Web 服务的文档,他们非常明确地指出,在他们的一个 WebMethods 上,参数具有 out 修饰符(?不确定这是否是正确的描述符)例如考虑以下 WebMethod 签名:
[WebMethod]
public void HelloWorld(out string strVal)
{
strVal = "Hello World";
}
[显然实际的方法不是 Hello World 方法]
现在,我从未考虑过设计带有 out/ref 参数的 WebMethod,这让我想知道他们为什么要使用它。
为了理解这个设计决策的应用程序,我抛出了一个原型和一些基本的 Hello World 风格的 webmethods...一个带有单个输出字符串参数,一个带有两个输出字符串参数,一个不接收任何参数,但返回一个字符串。
在尝试从单独的应用程序中引用我的 webmethods 时,我注意到我必须使用单独的字符串参数访问该方法,就像我定义了输出字符串的方法一样,以便在客户端有效担心:
public string HelloWorld1()
{
return "Hello World";
}
和
public void HelloWorld2(out string strVal)
{
strVal = "Hello World";
}
完全相同...因为我必须同时引用它们[其中 x 代替了正确的方法]:
string val = HelloWorldX();
如果它们不是 Web 方法 [像这样],我尝试以访问它们的方式引用这些方法:
string val = string.Empty;
MyService1.HelloWorld(out val);
Console.WriteLine(val);
这会导致编译错误,指出没有方法参数接受 1 个输入。这是为什么?显然有一个接受一个参数的 web 方法 - 我正在查看它 [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>
我认为很公平,所以理论上 [如果我能找到一种方法将参数传递/引用给 WebMethods] 这意味着我可以只传递两个可由方法设置的参数,但是当我这样做时:
string val1 = string.Empty;
string val2 = string.Empty;
MyService1.HelloWorld3(out val1,out val2);
Console.WriteLine(val1);
Console.WriteLine(val2);
当我尝试以这种方式引用 HelloWorld2 时,我应该得到相同的编译错误。一个明显的例外是它抱怨 2 个参数而不是 1 个 [事实上我确实得到了同样的例外,我测试了它]。
- 什么给了?
- 是否有原因或方法可以在我缺少的 WebMethods 中使用 out/ref 参数?
- 如果有,如何使用多个 out/ref 参数引用 WebMethods?
【问题讨论】:
标签: c# .net vb.net web-services