2014-02-07 31 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参考,并检查是否正确版本