问题标签 [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.
servicestack-bsd - 如何更改响应编码?
默认情况下,我的 ServiceStack 服务以 UTF-8 编码返回 json 响应。如何将其更改为ASCII?我认为这应该不难,但我不知道该怎么做。
c# - 使用 ServiceStack.Redis 对高容量场景的意外回复
我的问题与这个问题非常相似:在大容量场景中使用 servicestack.redis 时出现协议错误、“没有更多数据”错误、“零长度响应”错误
我在使用 IIS 的 C# Web 应用程序中使用 ServiceStack v3.9.54.0。我可以看到 Redis 版本 2.8.17 和 3.0.501 中的错误。
我收到的错误如下:
和:
我想到的第一件事是我在多个线程之间共享 Redis 连接,但是我在我的单例实现中看不到问题PooledRedisClientManager
(Configs
是一个存储连接信息的静态类):
所有的客户端都是通过pool获取的,如下:
我确定redis
var 不会在多个线程之间共享,据我所知,这段代码显示了一个正确的线程安全实现......
任何帮助将非常感激。
编辑:根据我使用的某些技术,我无法访问应用程序启动代码,也无法使用using
块。所以,我像这样包装所有客户:
servicestack-bsd - 有没有办法删除网址的“/json/reply/”部分?
我希望请求的 URL 是/AmazingRequest
(或什至/AmazingService
)而不是/json/reply/AmazingRequest
.
我已经尝试过该Route
属性,但它似乎没有效果。在 ServiceStack 中是否有可能,或者我是否必须求助于 URL 重写?
这是我尝试过的。它编译,但该属性没有效果。
我意识到我需要告诉 ServiceStack 这是一个 json 请求,但是我可以将Accept
andContent-Type
标头甚至 a?format=json
添加到查询字符串中。
PS 我使用的是 BSD 版本的 ServiceStack
nuget - 是否已从 Nuget 中删除 ServiceStack v3 库?
有谁知道我如何获得ServiceStack.Client
Nuget的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 引用?
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 成功,但我收到ErrorResponse
type 作为返回值而不是 expected Op<list<Y>,list<E>>
。
我还缺少什么吗?
.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 上。
c# - 如何在 ServiceStack 3 中将 JSON 日期序列化格式更改为单一服务?
我在基于 ServiceStack 3 的中间件应用程序中有许多遗留服务,它们使用 JSON 的默认日期序列化格式。问题是这对于调试来说是不可读的。
我想要一个正在测试的新服务,它具有人类可读的日期,ISO8061 格式可以做到这一点。
对于 ServiceStack 3,如何更改单个服务或逐个服务的 JSON 日期序列化格式?我不想用新的日期格式重新验证所有旧服务的消费者。
……
注意:我找到了 ServiceStack 4 的答案,但在 ServiceStack 3 中似乎不存在在 HttpResult 上创建 ResponseScope 的选项。
c# - 使用 servicestack 从 swagger-ui 中排除完整的服务
我正在尝试找出一种方法来隐藏/删除 swagger-UI 中的完整服务。根据关于 servicestack swagger 集成的文档,应该有一个Exclude
属性。但不幸的是没有。
是否有另一种方法可以从 swagger-ui 中删除服务?从 servicestack 元数据中删除它们也很好,但不是必需的。
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 服务器。仅当主服务器不可用时,才连接到从服务器。
c# - 我可以在 web.config 中注册一个 servicestack 响应过滤器吗?
我正在使用 servicestack v3。我在 IIS 中有两个网站(公共服务和存储服务),其中部署了 servicestack 服务。在公共服务网站中,我们需要使用某些响应过滤器。而存储服务网站不需要它们。
我想知道是否可以在 web.config 中注册响应过滤器,而不是在 AppHost.Configure 方法中,以便仅在需要它们的网站中轻松注册它们并使用相同的 servicestack(AppHost) dll。我不希望有两个不同代码版本的 servicestack(Apphost) dll。Apphost 代码使用 C# 编写,实际服务使用 F# 编写。
谢谢。