2011-11-15 8 views
2

wsdlから生成されたプロキシからMethodInfoを読んでいます。webmethodsに余分なパラメータが追加されました

方法の一つは、3(int)パラメータとint戻り値の型を持っていますが、私はParameterInfo[]を探るとき、私は実際には8つのパラメータを参照してください、

  • Int32
  • Boolean
  • Int32
  • Boolean,
  • Int32
  • Boolean
  • Int32&
  • これらの追加のパラメータが発信ん
  • Boolean&

?もう少し詳しく説明し

UPDATE

、生成されたプロキシのコードは、次のようになります。

/// <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])); 
} 

これはなぜでしょうか?

UPDATE

私は通りますが、これで盗聴している場合

、あなた杖は簡単に、単純に次のコードスニペットを適用することによって、それらの余分なパラメータを表示しないよう:

if (!parameterInfo[i].Name.EndsWith("Specified") && !parameterInfo[i].IsRetval && !parameterInfo[i].Name.EndsWith("Result")) 
{ 
    // magic 
} 
+0

MethodInfoを取得するために何を使用しましたか?これは同じ方法だと確信していますか?たとえばここではメソッド名は何ですか?基本的には:より多くの文脈をしてください –

+0

私はちょうどコードでプロキシアセンブリを生成し、反射を介してそれを読む。私は自分自身もwebserviceを書いた、それは本当に同じ方法です。 – Oxymoron

答えて

3

私は最近、これを見つけました自分のため。場合によっては、XSD内でminoccurs=0とする必要があります。 WCFプロキシクラスはnull可能な型を使用しないため、XmlSerializerが特定のフィールドを送信するかどうかを判断することはできません。

oneを設定できますが、送信されません。また、oneSpecifiedtrueに設定して、シリアライザでoneの値をシリアル化して送信する必要があります。

さらに詳しい情報here

+1

私はVS 2008からVS 2010に移行したとき、私自身も同様の問題に遭遇しました。素晴らしい答えCodeCaster! –

関連する問題