2012-02-25 22 views
1

看似成功地在c#控制檯應用程序中成功地使用了Web服務,對返回對象的檢查顯示屬性全爲空!結果中的.NET webservice客戶端null屬性

後答案一番搜索,我跟蹤這個問題倒在SOAP XML命名空間的問題 - 使用招,我稍微修改SOAP響應看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body> 
     <MyResponse xmlns="http://foo.com"> 
     <FIRST_NM xmlns="">Michael</FIRST_NM> 
     </MyResponse> 
    </soapenv:Body> 
    </soapenv:Envelope> 

唯一的一部分,我添加是:

... FIRST_NM xmlns =「」>邁克爾......(粗體部分)使用提琴手。

有一次,我在調試會話期間做了一箇中間人 - 瞧! 「邁克爾」的FIRST_NM值首次顯示在我的客戶端應用程序中。我決定嘗試這個,因爲我注意到從我的客戶端發出的請求具有這樣的屬性,而響應沒有。

OK,診斷完成。我正在轉向使其工作的一步。假設我有過的事情在服務器端沒有控制,我試圖開拓Reference.cs文件,並做一些改變,比如這個不斷變化的:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] 
public string FIRST_NM { 
    get { 
    return this.fIRST_NMField; 
    } 
    set { 
    this.fIRST_NMField = value; 
    this.RaisePropertyChanged("FIRST_NM"); 
    } 
} 

這樣:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Namespace="http://foo.com", Order=3)] 
public string FIRST_NM { 
... 

我加Namespace =「http://foo.com」,添加到XmlElementAttribute。我的想法是,沒有xmlns =「」那個名字空間「http://foo.com」從父母「MyResponse」標記繼承,我會得到一個匹配。

然而,這並沒有奏效。任何方向你都可以指向我將不勝感激。

回答

1

我能夠通過刪除以下行(S)完全從.NET生成的代碼解決該問題:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)] 

我想,因爲命名空間是從它實際上父標籤繼承「合格」不是「不合格」。刪除導致默認表單行爲的無,(按照文檔)。

感謝您的社區 - 我主要根據我在相關SO問題中找到的建議來解決這個問題。