2014-02-07 30 views
3

我想在我的服務改變ServiceStack從43年9月3日至4.0.9。ServiceStack 3.9。*〜4 *

我不得不改變我的代碼幾件事情,大多沿襲了release notes for this

有幾個奇怪的事情對我來說,就像沒有找到任何東西來代替ServiceStack.WebHost.EndpointsAppHostHttpListenerLongRunningBase但之後,我可以檢查這些事情,能夠讓我的代碼進行編譯。

的問題是,當我運行我的代碼,我得到這個例外的非常起點,也只是殺死服務:從裝配型「ServiceStack.Host.ServiceController」

法「ExecuteMessage」' ServiceStack,Version = 4.0.9.0,Culture = neutral,PublicKeyToken = null'沒有實現。

我得到這個打擊基地時:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using ServiceStack; 
using ServiceStack.Text; 
//using ServiceStack.WebHost.Endpoints; 
using ServiceStack.Web; 


namespace ThisService { 
    public class AppHost : AppHostHttpListenerPoolBase { //AppHostHttpListenerLongRunningBase { 
     public AppHost(int wthreadMax) 
      : base("This Service " + VcsInfo.ChangesetId, wthreadMax, typeof(ThisService).Assembly) { 
     } 
... 

我引用在我的項目: ServiceStack(4.0.9.0); ServiceStack.Client; ServiceStack.Common; ServiceStack.Interfaces; ServiceStack.Text

我確定我做錯了改成版本4. *並且因爲我想從以前的版本中刪除所有東西而試圖調用執行消息而丟失了。任何建議我應該在哪裏尋找?

順便說一句,這是一個簡單的服務:讓JSON - >數學+東西 - >返回JSON。

我想看看我找到的版本43年3月9日還發生在4.0.9版中的錯誤(無法找到具體的關於這個bug什麼,但我相信一個修復有相關的),看看我是否應該實際上重新考慮了我的代碼版本。

+2

的「packages.config」你已經發布的代碼是正確執行AppHostHttpListenerPoolBase'的'這是'AppHostHttpListenerLongRunningBase'的正確替代品(名稱剛剛被簡化了)。至於'ServiceStack.WebHost。終端「不用擔心這個,這個命名空間被重構出來,並沒有在第4版中使用,*與託管相關的東西現在生活在'ServiceStack.Host' * [見這裏](https://gist.github.com)/scottmcarthur/8705726)爲一個工作v4 AppHost的簡單例子。不知道爲什麼你沒有更多的代碼就得到這個錯誤,你有什麼是正確的。 – Scott

+0

我得到了同樣的錯誤:/ – iwayneo

回答

4

更新

現在應該在ServiceStack v4.10中解決,現在所有NuGet包都指定了與當前版本匹配的所有依賴項的最低版本。這將迫使NuGet下拉最新的軟件包,而不是最老的軟件包。


的NuGet似乎有怪異的行爲,這將在最低的依賴關係拉,當你安裝一個軟件包,所以如果你安裝最新版本的ServiceStack,例如:

PM> Install-Package ServiceStack -Version 4.0.9 

它會拉在最低匹配依賴,例如:

<package id="ServiceStack.Client" version="4.0.3" targetFramework="net45" /> 
<package id="ServiceStack.Common" version="4.0.3" targetFramework="net45" /> 
<package id="ServiceStack.Interfaces" version="4.0.3" targetFramework="net45" /> 
<package id="ServiceStack.Text" version="4.0.3" targetFramework="net45" /> 

這是一個意外的驚喜。不幸的是,ServiceStack假設它始終與最新的依賴關係一起工作,並使用與之相同的版本。

所以安裝ServiceStack後,你將需要更新你所有的軟件包可以使他們在網上爲最新版本,您可以在更新容易做在的NuGet UI標籤,或在NuGet包控制檯經理:

PM> Update-Package 

手動刪除任何程序集重定向

安裝以前V4.02 ServiceStack(現在刪除)的創造了新的組裝重定向 for ServiceStack.InterfacesWeb.config如果它們存在,也應該手動刪除。現在不應該爲新項目創建這些項目。

+0

我有一個類似的問題,這是因爲並非所有的軟件包都用nuget更新過。所以,這個答案看起來就像是原因 - 只要確保在bin文件夾中所有版本的dll都是最新的。 –

2

我有同樣的問題也是如此。因此,我嘗試從Nuget安裝較舊的v4版本並設法使其工作。

使用斯科特的例子我能得到這個工作正常,如果我安裝4.0.4:

install-package servicestack -Version 4.0.4 

如果我使用4.0.5版則運行,但在例如網頁報告

Method not found: 'Void ServiceStack.Web.IResponse.set_Dto(System.Object) 

如果我使用4.0.6或更高版本,那麼我會收到RGPT報告的錯誤。

所以,現在可能是使用4.0.4版本,直到有人比我更好的答案回答更多的知識的情況。我剛開始使用今天ServiceStack,所以我不知道很多尚未;)

更新:我沒有足夠高的聲譽ServiceStack張貼所以覺得最好的編輯我原來的職位評論。以下回答mythz有關鍵信息。安裝後立即更新您的NuGet包和然後檢查網絡/配置/的app.config,看是否有dependentAssembly bindingRedirects被掛在 - 如果是這樣,然後刪除它們,並遠離你去在4.10版:)

+0

你得到我的upvote,因爲我能夠使用4.0.4完全像你一樣工作(偉大的,我曾嘗試過另一個版本,但沒有嘗試所有這些)。沒有將它標記爲正確答案,因爲它仍然不適用於4.0.9。 – RGPT

0

我也有類似的問題。我遵循升級路徑,首先通過Beta版渠道升級到官方渠道。我很快意識到,Beta版本的版本號比官方頻道更大。

NuGet會先在本地檢查更新的版本,然後再遠程拉入庫。當然,它將從官方渠道獲得ServiceStack v4.0.x,但所有依賴項都將來自已經下載的Beta版本(即本地)。

我做的事,以解決這個問題:通過的NuGet

  1. 卸載從解決方案的所有ServiceStack依賴
  2. 刪除解決方案的的NuGet「/包」文件夾,它使用NuGet包還原
  3. 重新導入
  4. 重新添加通過的NuGet的ServiceStack參考,並檢查是否正確版本