2013-02-07 70 views
1

當我爲我的服務創建一個代理時,一些額外的參數被添加爲XmlIgnoreAttribute。例如:如何檢測服務代理上的自動生成的方法參數?

接口方法合同聲明:

[OperationContract] 
void AddToList(int integerToAdd); 

方法實現:

public void AddToList(int integerToAdd) { 
    intList.Add(integerToAdd); 
} 

現在,這裏是這個方法實際上看起來的時候我動態生成的代理我的服務,如:

/// <remarks/> 
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/IService1/AddToList", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
public void AddToList(int integerToAdd, [System.Xml.Serialization.XmlIgnoreAttribute()] bool integerToAddSpecified) 
{ 
    this.Invoke("AddToList", new object[] {integerToAdd, integerToAddSpecified}); 
} 

如果我有這個參數的ParameterInfo對象,ho我可以檢查這個參數已被標記爲XmlIgnoreAttribute?

如果這不是檢查這些自動生成的參數的好方法,那麼是否有另一種(更好的)方法來檢查它們?

獎勵:是否會有非布爾類型生成並標記爲XmlIgnoreAttribute的情況?

回答

1

我想你會使用ParameterInfo.GetCustomAttributes()

ParameterInfo secondParam = .. 
object[] attribs = 
      secondParam.GetCustomAttributes(typeof(XmlIgnoreAttribute), false); 
//the second bool param is ignored. See the docs. 
//check if => attribs has anything.. 

(1)我不知道爲什麼你正在檢查這些參數的東西所以不知道它的好/比較好。 (2)不確定第二個問題。我認爲這是來自VS代碼生成(svcutil?)也許一些MSFT的誰設計這可能會更好。

+0

我正在調用該方法,並且布爾值是我設置整數時需要設置爲true的必需參數,所以我想找到一種方法來檢測此類型的屬性並將其設置。謝謝。我在自定義屬性中發現了它,但是,這就是說,你有什麼關於獎金的問題嗎? * LOL *僅生成標記爲XmlIgnoreAttribute的布爾類型? – Alexandru

+1

@亞歷山德魯這就是我在(2)'之後的答案中的意思。你可能會有更好的運氣,搜尋一些建立了svcutil的MS團隊或是某個知道某人的人,並給他們發郵件。我已經做了很多次了,如果你徹底的瞭解了它:D – gideon

相關問題