ServiceStack 3.9。*到4. *

时间:2014-02-07 03:34:15

标签: c# servicestack

我正在尝试将服务中的ServiceStack从3.9.43更改为4.0.9。

我必须在代码中更改一些内容,并且大多数都遵循release notes for this

对我来说有一些奇怪的事情,比如找不到任何东西来替换 ServiceStack.WebHost.Endpoints AppHostHttpListenerLongRunningBase 但我可以检查这些东西后能够检查使我的代码编译。

问题在于,当我运行我的代码时,我在一开始就得到了这个异常,它只是杀死了服务:

程序'ServiceStack,Version = 4.0.9.0,Culture = neutral,PublicKeyToken = null'中的'ServiceStack.Host.ServiceController'类型中的方法'ExecuteMessage'没有实现。 的

我在击中基地时得到这个:

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。

我想知道我是否发现版本3.9.43仍然在版本4.0.9中发生的错误(找不到任何关于该bug的具体信息,但我相信其中有一个修复有关),看看我是否应该重新考虑此版本的代码。

3 个答案:

答案 0 :(得分:4)

v4.10中的更新

现在应该在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(现已删除)为 Web中的 ServiceStack.Interfaces 创建了新的程序集重定向 .config ,如果它们存在,您也应手动删除。现在不应为新项目创建这些项目。

答案 1 :(得分:2)

我也有同样的问题。因此,我尝试从Nuget安装较旧的v4版本并设法使其工作。

使用Scott的示例,如果我安装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软件包,然后检查web / config / app.config以查看是否有任何dependentAssembly bindingRedirects闲置 - 如果是,那么删除它们然后离开你去:)

答案 2 :(得分:0)

我也遇到过类似的问题。在升级到官方频道之前,我首先通过Beta频道跟踪升级路径。我很快意识到,Beta库的版本号大于官方频道。

NuGet将首先在本地检查更新版本,然后再远程引入库。当然,它会从官方渠道引入ServiceStack v4.0.x,但所有依赖项都来自已下载的Beta(即本地)。

我做了什么来解决它:

  1. 通过NuGet
  2. 从解决方案中卸载所有ServiceStack依赖项
  3. 删除了解决方案的Nuget'/ packages'文件夹,并使用NuGet包恢复重新导入它
  4. 通过NuGet重新添加ServiceStack引用,并检查'​​packages.config'以获取正确的版本