Я читаю некоторые MethodInfo
с прокси, сгенерированного из wsdl.
Один из методов имеет три (int
) параметра и тип возврата int
, но когда я исследую ParameterInfo[]
, я на самом деле вижу восемь параметров:
Int32
, Boolean
, Int32
, Boolean
, Int32
, Boolean
, Int32&
, Boolean&
Откуда берутся эти дополнительные параметры?
ОБНОВЛЕНИЕ
Для более подробной информации код в сгенерированном прокси выглядит следующим образом:
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/IInleerAppService/AddThreeNumbers", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public void AddThreeNumbers(int one, [System.Xml.Serialization.XmlIgnoreAttribute()] bool oneSpecified, int two, [System.Xml.Serialization.XmlIgnoreAttribute()] bool twoSpecified, int three, [System.Xml.Serialization.XmlIgnoreAttribute()] bool threeSpecified, out int AddThreeNumbersResult, [System.Xml.Serialization.XmlIgnoreAttribute()] out bool AddThreeNumbersResultSpecified) {
object[] results = this.Invoke("AddThreeNumbers", new object[] {
one,
oneSpecified,
two,
twoSpecified,
three,
threeSpecified});
AddThreeNumbersResult = ((int)(results[0]));
AddThreeNumbersResultSpecified = ((bool)(results[1]));
}
Почему это так?
ОБНОВЛЕНИЕ
Если вы, как и я, ошиблись этим, вы можете легко избежать отображения этих дополнительных параметров, просто применив следующий фрагмент кода:
if (!parameterInfo[i].Name.EndsWith("Specified") && !parameterInfo[i].IsRetval && !parameterInfo[i].Name.EndsWith("Result"))
{
// magic
}