问题标签 [servicestack-bsd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
129 浏览

servicestack-bsd - 如何更改响应编码?

默认情况下,我的 ServiceStack 服务以 UTF-8 编码返回 json 响应。如何将其更改为ASCII?我认为这应该不难,但我不知道该怎么做。

0 投票
1 回答
1735 浏览

c# - 使用 ServiceStack.Redis 对高容量场景的意外回复

我的问题与这个问题非常相似:在大容量场景中使用 servicestack.redis 时出现协议错误、“没有更多数据”错误、“零长度响应”错误

我在使用 IIS 的 C# Web 应用程序中使用 ServiceStack v3.9.54.0。我可以看到 Redis 版本 2.8.17 和 3.0.501 中的错误。

我收到的错误如下:

和:

我想到的第一件事是我在多个线程之间共享 Redis 连接,但是我在我的单例实现中看不到问题PooledRedisClientManagerConfigs是一个存储连接信息的静态类):

所有的客户端都是通过pool获取的,如下:

我确定redisvar 不会在多个线程之间共享,据我所知,这段代码显示了一个正确的线程安全实现......

任何帮助将非常感激。


编辑:根据我使用的某些技术,我无法访问应用程序启动代码,也无法使用using块。所以,我像这样包装所有客户:

0 投票
1 回答
206 浏览

servicestack-bsd - 有没有办法删除网址的“/json/reply/”部分?

我希望请求的 URL 是/AmazingRequest(或什至/AmazingService)而不是/json/reply/AmazingRequest.

我已经尝试过该Route属性,但它似乎没有效果。在 ServiceStack 中是否有可能,或者我是否必须求助于 URL 重写?

这是我尝试过的。它编译,但该属性没有效果。

我意识到我需要告诉 ServiceStack 这是一个 json 请求,但是我可以将AcceptandContent-Type标头甚至 a?format=json添加到查询字符串中。

PS 我使用的是 BSD 版本的 ServiceStack

0 投票
1 回答
82 浏览

nuget - 是否已从 Nuget 中删除 ServiceStack v3 库?

有谁知道我如何获得ServiceStack.ClientNuget的V3版本?这个维基页面似乎暗示他们应该在那里:https ://github.com/ServiceStackV3/ServiceStackV3

我需要创建一个新项目来与旧版 v3 ServiceStack 实现进行交互。我无法升级现有的 API,但JsonServiceClient新 v4 中的 API 不兼容。我已经从我们的旧 API 中导入了合同 DLL,这导致了不兼容问题。

确切的错误是:

错误 105 类型“ServiceStack.ServiceHost.IReturn”在未引用的程序集中定义。您必须添加对程序集“ServiceStack.Interfaces,Version=3.9.48.0,Culture=neutral,PublicKeyToken=null”的引用。D:\Projects\Adactus.Pulse\Main\Solutions\Integration\Mulesoft\SupplierIntegration\ScmtProcessor\InitialInstructionProcessor.cs 231 17 ScmtProcessor

他们是否被偶然移动到不同的 nuget 包名称(即 BSD 版本)?还是我需要手动开始复制 DLL 引用?

0 投票
1 回答
226 浏览

c# - ServiceStack中自定义ServiceRunner的HandleException中访问responseDTO类型

我已经编写了自定义 ServiceRunner 并覆盖了 HandleException 方法。正如我所看到的,如果服务中出现未处理的异常,HandleException 方法返回的对象将成为服务响应。我希望返回与服务在成功的情况下返回的相同的 responseDTO 类型。有什么方法可以在 HandleException 内部访问遇到异常的服务的 responseDTO 类型?

编辑:根据收到的答案,我使用定义如下的 DTO/服务类型实现了服务(在 F# 中):

因此,我希望在 HandleException 中收到的类型是Op<list<Y>,list<E>> (Y 和 E 是在 bin 文件夹中可用的 dll 中定义的已知类型)

根据建议,我尝试了以下两个选项,因为 WebRequestUtils 在两个命名空间中都可用:

对于 test1 我收到以下异常:

堆栈跟踪:

调用 test2 成功,但我收到ErrorResponsetype 作为返回值而不是 expected Op<list<Y>,list<E>>

我还缺少什么吗?

0 投票
0 回答
222 浏览

.net - ServiceStack.Redis 反序列化问题 - 有时 JSON 已损坏

我有一个使用 ServiceStack.Redis 来存储对象的服务(用 JSON 序列化)。每个 HTTP 请求都会更新一个键 - 流程很简单:获取键的值,将其反序列化为列表,添加/删除项目,将修改后的列表写回 Redis。
最近,我们注意到一个问题——一些密钥会损坏(所以它们不能被反序列化)。我不知道为什么。
异常说Type definitions should start with a '{', expecting seralized type X, got string starting with: Y at ServiceStack.Text.Common.DeserializeTypeRefJson.StringToType(Type type, String strType, EmptyCtorDelegate ctorFn, Dictionary'2 typeAccessorMap
我阅读了其他答案-其中大多数暗示您从另一台计算机获取 JSON 数据,或者您无法控制它的构建方式。但是我愿意。
我们只使用少数类型 - 大多数属性是简单的 int,其他是 DateTime。
我只有一个理论——涉及多线程。但在这种情况下,它应该是“最后写入获胜”并且不应该发生损坏。其他人看到这种行为吗?
我们将 ServiceStack 3.9.71(3.x 系列的最新版本)与 Redis 2.8.9 一起使用。.NET 4.5 Web 应用程序托管在 Windows 上,Redis 服务器位于 Linux 上。

0 投票
1 回答
207 浏览

c# - 如何在 ServiceStack 3 中将 JSON 日期序列化格式更改为单一服务?

我在基于 ServiceStack 3 的中间件应用程序中有许多遗留服务,它们使用 JSON 的默认日期序列化格式。问题是这对于调试来说是不可读的。

我想要一个正在测试的新服务,它具有人类可读的日期,ISO8061 格式可以做到这一点。

对于 ServiceStack 3,如何更改单个服务或逐个服务的 JSON 日期序列化格式?我不想用新的日期格式重新验证所有旧服务的消费者。

……

注意:我找到了 ServiceStack 4 的答案,但在 ServiceStack 3 中似乎不存在在 HttpResult 上创建 ResponseScope 的选项。

0 投票
1 回答
338 浏览

c# - 使用 servicestack 从 swagger-ui 中排除完整的服务

我正在尝试找出一种方法来隐藏/删除 swagger-UI 中的完整服务。根据关于 servicestack swagger 集成的文档,应该有一个Exclude属性。但不幸的是没有。

是否有另一种方法可以从 swagger-ui 中删除服务?从 servicestack 元数据中删除它们也很好,但不是必需的。

0 投票
1 回答
129 浏览

redis - ServiceStack.Redis v3 和多主机 - 推荐架构

我们遇到了一个问题,即多个实例RedisMqServer相互绊倒 - 停止一个服务器会停止其他服务器。显然,我们实现这一点的方式是错误的,但我无法确定RedisMqServer在这种情况下应该如何使用。

我们的基础设施包括:

  • 主/从配置中的两个 Redis 服务器
  • 两个负载均衡的 API 实例(以下称为“API A”)
  • 两个负载平衡的 API 实例(以下称为“API B”)

API A 和 B 是两个独立的应用程序,它们使用 ServiceStack.RedisRedisMqServer相互发送同步和异步消息。我们正在使用 ServiceStack 的开源 v3 版本。

两个 API 都有一个RedisMqServer配置,因为异步通信发生在两个方向。

RedisMqServer被释放时,它会在通道上发送一条STOP消息mq:topic:in,这会导致服务器取消订阅所有通道,从而停止它为请求提供服务。

但是,由于 API A 和 API B 都在使用此通道,因此停止其中一个最终会停止另一个。

是否应该为每个实例使用一个 Redis 服务器实例RedisMqServer

值得注意的是,每个 API 在任何时间点都只连接到单个 Redis 服务器。仅当主服务器不可用时,才连接到从服务器。

0 投票
1 回答
66 浏览

c# - 我可以在 web.config 中注册一个 servicestack 响应过滤器吗?

我正在使用 servicestack v3。我在 IIS 中有两个网站(公共服务和存储服务),其中部署了 servicestack 服务。在公共服务网站中,我们需要使用某些响应过滤器。而存储服务网站不需要它们。

我想知道是否可以在 web.config 中注册响应过滤器,而不是在 AppHost.Configure 方法中,以便仅在需要它们的网站中轻松注册它们并使用相同的 servicestack(AppHost) dll。我不希望有两个不同代码版本的 servicestack(Apphost) dll。Apphost 代码使用 C# 编写,实际服务使用 F# 编写。

谢谢。