C# ServiceStack 3.9.*至4*
我正在尝试将服务中的ServiceStack从3.9.43更改为4.0.9 我不得不修改代码中的一些内容,并且大部分都遵循了规则 对我来说有一些奇怪的事情,比如找不到任何东西来替换ServiceStack.WebHost.Endpoints或AppHostHttpListenerLongRunningBase,但我可以在之后检查这些东西,并能够使我的代码进行编译 问题是,当我运行代码时,我在一开始就遇到了这个异常,它只是终止了服务: 程序集“ServiceStack,版本=4.0.9.0,区域性=中立,PublicKeyToken=null”中的“ServiceStack.Host.ServiceController”类型中的方法“ExecuteMessage”没有实现。 我在打垒的时候得到了这个:C# ServiceStack 3.9.*至4*,c#,servicestack,C#,servicestack,我正在尝试将服务中的ServiceStack从3.9.43更改为4.0.9 我不得不修改代码中的一些内容,并且大部分都遵循了规则 对我来说有一些奇怪的事情,比如找不到任何东西来替换ServiceStack.WebHost.Endpoints或AppHostHttpListenerLongRunningBase,但我可以在之后检查这些东西,并能够使我的代码进行编译 问题是,当我运行代码时,我在一开始就遇到了这个异常,它只是终止了服务: 程序集“ServiceStack,版本=4.0.9.0,区域性
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.Common;
接口;
文本
我确信我在更改到版本4.*时做了一些错误的事情,我对试图调用Execute消息的内容感到迷茫,因为我认为删除了以前版本中的所有内容。对我应该去哪里有什么建议吗
顺便说一下,这是一个简单的服务:getJSON->math+stuff->returnJSON
我想知道我在3.9.43版中发现的一个bug是否仍然发生在4.0.9版中(找不到关于这个bug的任何具体信息,但我相信有一个修复是相关的),看看我是否应该为这个版本重新考虑我的代码。我也有同样的问题。因此,我尝试从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声誉来发表评论,因此最好编辑我的原始帖子。下面mythz的答案包含了关键信息。安装和后立即更新您的nuget软件包,然后检查web/config/app.config以查看是否有任何依赖程序集绑定重定向挂起-如果有,请删除它们,然后离开:)在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的v4.02(现在已删除)创建了新的程序集重定向,用于Web.config中的ServiceStack.Interfaces,如果存在这些接口,也应手动删除它们。这些现在不应该为新项目创建。我也有类似的问题。我遵循升级路径,首先通过Beta频道升级到官方频道。我很快意识到,Beta版本库的版本号比官方渠道的版本号要大 NuGet将首先在本地检查最新版本,然后再远程引入库。当然,它将从官方渠道引入ServiceStack v4.0.x,但所有依赖项都将来自已下载的测试版(即本地版) 我是如何解决的:
您发布的代码是
AppHostHttpListenerPoolBase
的正确实现,它是AppHostHttpListenerLongRunningBase
的正确替代品(名称刚刚简化)。至于ServiceStack.WebHost.Endpoints
不要担心这一点,这个名称空间已经重构,没有在v4中使用,与宿主相关的东西现在位于ServiceStack.Host
下,这是一个工作的v4 AppHost的简单示例。我不知道你为什么会在没有更多代码的情况下出现这个错误,你所说的是对的。我得到了同样的错误:/你得到了我的支持,因为我能够像你一样使用4.0.4使它正常工作(很好,我以前尝试过另一个版本,但没有尝试所有版本)。没有将其标记为正确答案,因为它仍然不适用于4.0.9。我有一个类似的问题,这是因为并非所有包都使用nuget进行了更新。所以,这个答案似乎就是原因——只要确保你的bin文件夹中的所有DLL版本都是最新的。
PM> Update-Package