2010-02-12 164 views
0

這很奇怪,我只是想知道是否有人可以向我解釋這一點。我有一個由傳統的舊asmx風格的Web服務運行的Web服務。我們有這是在沒有被顯示給消費者這樣的內部方法使用的公共財產:由IIS提供的WSDL中缺少的公共屬性6

public class User { 
    public string EmployeeID; 

    protected override void DoSomething(){ 
     var foo = EmployeeId; 
    } 
} 

現在這裏是怪異的一部分。我們決定擺脫這個領域。但是由於Apache Axis客戶端綁定到特定的wsdl,我們不想從wsdl中刪除它。因此,我們離開了財產,但在內部方法中刪除了它的用法。當我們這樣做時,該屬性突然從WSDL中丟失......但只在運行IIS6的服務器上。運行IIS 5.1的開發人員仍然可以獲得該屬性。

我們最終把一個平凡的使用回到方法(獲得並將其設置爲空字符串)。突然它IIS6服務器上再次出現了。

怎麼了?

回答

3

聽起來類似於this problem I had一點點。

的屬性是不是在WSDL,因爲它有一個私人的制定者。

+0

可能的話,在我的情況大家是公開的,然而,類寫很久很久以前在.NET 1.something,因此沒有足夠的{獲得;設置;}聲明。我認爲這可能與你的問題有關。如果是,你可能會得到賞金呢! – ryber 2010-02-16 16:56:48

0

的 「公共字符串僱員;」不是財產聲明,而是領域聲明。你確定,wsdl的類是生成的,有一個屬性不是字段?

+0

當作爲公共字段時,該字段被列爲 ryber 2010-02-17 15:24:21

0

是它有.NET 3.5偶然安裝消失在服務器,同時仍然顯示它沒有那個版本的服務器?不確定this question可能與您遇到的是同一件事,或者您將字段/屬性標記爲[Obsolete],而.NET(2.0及更高版本)不會序列化。

0

我的猜測是,你看到的編譯器優化的可愛的副作用之一:

  • 你就是我的從未使用的字段級別宣言。
  • 編譯器在其許多遍中的一箇中看到了這一點,並說「嘿,沒有人使用這個」
  • 編譯器刪除聲明,這個微小的優化不會傷害任何人的內容。
  • 稍後,生成WSDL時,程序集會反映出來,現在缺少沒有人使用的良好公共變量。

現在理論上,這應該只發生在「發佈構建」上,但我對編譯器「授權」做出的各種優化知之不多,無法給出明確的答案。