当前位置: 首页 > 知识库问答 >
问题:

ServiceStack Redis序列化错误

孟杰
2023-03-14

(我之前的问题/议题不够具体,因此完全重写了。)

问题:ServiceStack 4.0.16不适用于Redis。

重新创建的步骤:

  1. 在VS 2013中创建一个新的ASP. NET Web表单应用程序。
  2. 更新Nuget包
  3. 安装Nuget包=

容器登记册(c)=

>

  • 运行项目,你应该只得到一个空白屏幕在Chrome
  • 导航到/元数据,你会得到一个通用的HTTP错误500.0-内部服务器错误
  • 打开事件查看器并转到应用程序,您应该会看到三个错误

    1.未能初始化AppDomain:/LM/W3SVC/24/ROOT

    例外:系统。运行时。序列化。序列化异常

    消息:键入ServiceStack。在程序集ServiceStack,版本=4.0.16.0,文化=中性,PublicKeyToken=null中的争议跟踪程序未标记为可序列化。

    StackTrace:at系统。网状物群众或部队的集合。主人的环境。在系统上初始化(ApplicationManager appManager、IAApplicationHost appHost、IConfigMapPathFactory configMapPathFactory、HostingEnvironmentParameters hostingParameters、PolicyLevel PolicyLevel)。网状物群众或部队的集合。应用程序管理器。在系统中创建带有HostingEnvironment的AppDomain(字符串appId、IAApplicationHost appHost、HostingEnvironmentParameters hostingParameters)。网状物群众或部队的集合。应用程序管理器。CreateAppDomainWithHostingEnvironmentAndReportErrors(字符串appId、IAApplicationHost appHost、HostingEnvironmentParameters hostingParameters)

    2.尝试启动集成应用程序实例时出错。

    例外:系统。运行时。序列化。序列化异常

    消息:键入ServiceStack。在程序集ServiceStack,版本=4.0.16.0,文化=中性,PublicKeyToken=null中的争议跟踪程序未标记为可序列化。

    StackTrace:at系统。网状物群众或部队的集合。主人的环境。在系统上初始化(ApplicationManager appManager、IAApplicationHost appHost、IConfigMapPathFactory configMapPathFactory、HostingEnvironmentParameters hostingParameters、PolicyLevel PolicyLevel)。网状物群众或部队的集合。应用程序管理器。在系统中创建带有HostingEnvironment的AppDomain(字符串appId、IAApplicationHost appHost、HostingEnvironmentParameters hostingParameters)。网状物群众或部队的集合。应用程序管理器。在系统中创建带有HostingEnvironment和报告错误的AppDomain(字符串appId、IAApplicationHost appHost、HostingEnvironmentParameters hostingParameters)。网状物群众或部队的集合。应用程序管理器。系统上的GetAppDomainWithHostingEnvironment(字符串appId、IAApplicationHost appHost、HostingEnvironmentParameters hostingParameters)。网状物群众或部队的集合。应用程序管理器。系统上的CreateObjectInternal(字符串appId、类型、IAApplicationHost appHost、Boolean failIfExists、HostingEnvironmentParameters hostingParameters)。网状物群众或部队的集合。进程主机。StartApplication(字符串appId、字符串appPath、对象

    3.应用程序报告为不健康。工作进程现在将请求回收。给出的理由:ASP。NET应用程序初始化失败。。数据是错误的。

  • 共有1个答案

    夏侯枫
    2023-03-14

    此问题已在ServiceStack内部解决,并作为v4发布。0.17.

    Demis提供的关于该问题的信息:

    这是因为在初始化期间(即不是在运行时)解析了IDisposable依赖项,这意味着HttpContext。项不存在,因此在CallContext的LogicalData存储中跟踪可处置项,而在IIS Express主机中,该存储显然不支持非序列化项。所以我添加了一个新的容器。Exists api检查IOC是否存在,因此我们不再需要在内部解析项目(在ServiceStackHost中),我们也不会在应用程序初始化期间跟踪RequestContext中的项目。

    为什么这在MemoryCacheClient而不是RedisClientManager上运行良好?

    因为默认逻辑是,如果您尚未注册ICacheClient,它将首先检查您是否已注册Redis,在这种情况下,它将注册为ICacheClient,否则它将注册MemoryCacheClient,代码位于:https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/ServiceStackHost.cs#L376

    最初它是通过解析实例来检查是否存在,现在它使用新的存在方法来检查而不解析实例。

    @黛米丝,谢谢你的帮助!

     类似资料:
    • ServiceStack.Redis 是一个 Redis 的 C# 客户端。是 Service Stack 的一部分。 using (var redisManager = new PooledRedisClientManager())using (var redis = redisManager.GetClient()){    var redisTodos = redis.As<Todo>();

    • 问题内容: 我正在尝试使用protobuf序列化结构。经过许多小时试图弄清楚我在做什么错,我决定测试google的示例,但效果不佳 我从Google(https://developers.google.com/protocol- buffers/docs/javatutorial )获得以下协议: 我正在尝试将其序列化: byte []序列化= john.toByteArray(); 我得到“ j

    • 在任何人试图告诉我这是一个重复之前,我已经试过了关于这个的解决方案,以及几乎所有其他我能找到的答案。 我的项目在IntelliJ中构建得很好,通过了我设置的所有测试,它甚至在IntelliJ内部运行得也很好,当我试图运行maven构建的JAR时,除了几个例外,我就被打了个耳光。 代码所指向的类: 根据我看到的例外情况,当通过命令提示符运行时,问题出现在第31行,它将是: 命令提示符中的堆栈跟踪如下

    • ClassCastException:com.google.gson.internal.LinkedTreeMap不能强制转换为java.util.HashMap 提前谢了。

    • 问题内容: 我试图反序列化以DateTime作为修饰符的类: 但是,当我尝试tro反序列化时,却遇到以下异常: 我用它来反序列化: 还有我的jsonData的示例: 问题答案: 期望使用无参数构造函数。的最新版本没有这样的构造函数。 如果您已固定格式,即。应该只是一个时间戳,那么你可以简单地注册与。它将在内部用于字段。您可以摆脱注释。 您需要添加库。

    • 这是包含列表的POJO JSON具有以下结构: 运行时,web服务的结果运行良好,但反序列化会打印此错误: