2011-07-30 93 views
2

我正在創建新的WCF服務。我最初只有三個操作。但過了一段時間,我決定再添加兩個。此操作不會顯示在Microsoft測試客戶端中,當我嘗試從我的WPF客戶端添加服務引用時,不會出現在操作列表中。此外,我試圖評論其中一項最初的行動。它仍然在微軟測試客戶端,並可以調用。我試過也刪除由服務生成的dll並再次重新生成。沒有運氣。有什麼類型的「緩存」,Visual Studio存儲我可以刪除的WCF服務庫?WCF服務操作未更新

更新:我正在使用在ASP.NET開發服務器中運行的服務。

回答

1

我不知道爲什麼,但我創建了一個新項目,並從有問題的項目中複製了操作的定義,問題消失了。微軟的奧祕之一更多。

+2

我不會稱之爲「微軟之謎」。我會稱之爲「你沒有知道問題是什麼,而是解決了它」。尤其是,通過創建新項目完成的一件事是您啓動了運行更改後的代碼的Development Server的新實例。重新啓動原始服務器可能已解決問題。 –

+0

我也嘗試重新啓動ASP.NET開發服務器,但生成的代碼仍然生成了不同步。那麼,如果我比較整個項目會發現不同的東西,但我坦白地說,我沒有時間做這件事。 – Apocatastasis

+1

我遇到了同樣的問題(操作未出現在生成的客戶端中),並且發現至少有一個可靠的原因/影響。我的服務操作使用[FaultContract]屬性進行裝飾。當我刪除這些屬性時,客戶端已正確生成。我不確定我的FaultContract實現是否有問題,或者服務引用生成器是否不喜歡該屬性。我在生成客戶端後恢復了屬性,並且所有事情都按預期工作。 – JcFx

0

確保在添加新操作後更新服務。

還要確保他們有屬性[OperationContract]

+0

當然,錯誤依然存在。 – Apocatastasis

4

您需要了解事情發生的順序。

  1. 您更改您的代碼,在其上添加方法或使用[OperationContract]或刪除它們,或更改它們的參數或返回值。
  2. 然後您必須構建您的服務,生成一個包含更改的.DLL。
  3. 然後,必須部署改變的DLL到它會在
  4. 運行服務器之後,您必須重啓服務(這可能因不同的服務器上自動發生。例如,IIS將回收當服務它看到DLL已更改)
  5. 然後,您必須更新您的客戶端,WCF測試客戶端或「添加服務參考」或等效項。

這最後會產生一個對服務發送新元數據或WSDL請求的效果。只有然後客戶端才能看到您對服務定義所做的更改。

+0

滿足所有條件,錯誤仍然存​​在。 – Apocatastasis

+0

謝謝你,你解決了我的問題@約翰! –

+0

同樣的問題,在去stackoverflow之前做了好幾次,沒有用 –

0

我們發現的一件事是,當您部署dll時,他們必須在bin中,並且不能駐留在調試或發佈文件夾中。

0

爲我工作:剛剛重建WCF項目

0

你關閉客戶端 爲顯示您的服務

class Test 
    { 
     static void Main() 
     { 
      LocationClient client = new LocationClient(); 

      // Use the 'client' variable to call operations on the service. 

      // Always close the client. 
      client.Close(); 
     } 
    } 
0

這裏的解決方案的客戶端連接:

確保您dataContract呢不包含任何枚舉 (可以用整數代替)

請務必引用一個pr oject的解決方案,而不是你的磁盤

  1. 在DLL中刪除您的「bin」和「目標文件」文件夾
  2. 重新編譯
  3. 在IIS回收應用程序池
  4. 在IIS重新啓動服務
  5. 在IIS 「瀏覽」 爲您服務

=>你猜對了