我已經收到了一些文件,從我們的供應商之一,他們正在發佈web服務,他們是非常具體的,關於他們的WebMethods一場爭論已經out修飾符之一( ?不知道這是正確的描述),例如考慮以下的WebMethod簽名:的.Net Web服務和OUT/REF的WebMethod參數
[WebMethod]
public void HelloWorld(out string strVal)
{
strVal = "Hello World";
}
[顯然實際的方法不是一個Hello World方法]
現在,我從來沒有考慮設計的WebMethod用out/REF參數,它讓我不知道他們爲什麼會使用過它。
試圖理解這個設計決策的一個應用程序我把一個原型和幾個基本的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參考參數...
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明顯異常[而事實上我得到了同樣的異常,我測試了它。
- 是怎麼回事?
- 是否有一個原因,或者使用出的WebMethods/REF論點,我缺少的方法嗎?
- 如果有,我怎麼引用多了/ REF參數的WebMethods?
當你達到2000的聲望時,我相信正確的協議將會是編輯Steven Behnke的答案......就像它可能感覺到的侵入性一樣。但發佈你的總結很好。 +1 – 2008-12-19 14:17:30