問題タブ [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 サービスは json 応答を UTF-8 エンコーディングで返します。それをASCIIに変更するには?これは難しくないと思いますが、やり方がわかりません。
c# - ServiceStack.Redis を使用した大量シナリオでの予期しない応答
私の問題はこれと非常に似ています:プロトコルエラー、「データがありません」エラー、大量のシナリオでservicestack.redisを使用している間の「ゼロ長の応答」エラー
IIS で動作する C# Web アプリケーションで ServiceStack v3.9.54.0 を使用しています。Redis バージョン 2.8.17 と 3.0.501 の両方でエラーを確認できました。
私が受け取ったエラーは次のとおりです。
と:
最初に考えたのは、複数のスレッド間で Redis 接続を共有しているということでしたが、PooledRedisClientManager
(Configs
は接続情報を格納する静的クラスです)のシングルトン実装に問題は見られません。
すべてのクライアントは、次のようにプールを通じて取得されます。
var が複数のスレッド間で共有されていないと確信しておりredis
、私が見る限り、このコードは適切なスレッドセーフな実装を示しています...
どんな助けでも大歓迎です。
編集:私が使用しているいくつかのテクノロジによると、アプリのスタートアップ コードにアクセスすることも、using
ブロックを使用することもできません。したがって、すべてのクライアントを次のようにラップします。
nuget - ServiceStack v3 ライブラリは Nuget から削除されましたか?
ServiceStack.Client
Nugetの V3 バージョンを入手する方法を知っている人はいますか? この wiki ページは、それらが存在する必要があることを示唆しているようです: https://github.com/ServiceStackV3/ServiceStackV3
従来の v3 ServiceStack 実装と対話するために、新しいプロジェクトを作成する必要があります。既存の API をアップグレードできませんがJsonServiceClient
、新しい v4 には互換性がありません。コントラクト DLL をレガシー API からインポートしたため、非互換性の問題が発生しています。
正確なエラーは次のとおりです。
エラー 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 タイプを返したいと考えています。例外が発生したサービスの responseDTO タイプである HandleException 内にアクセスする方法はありますか?
編集:受け取った回答に従って、次のように定義されたDTO /サービスタイプでサービス(F#にあります)を実装しました:
したがって、HandleException で受け取ると予想される型は次のとおりですOp<list<Y>,list<E>>
(Y と E は、bin フォルダーで利用可能な dll で定義されている既知の型です)
提案に従って、WebRequestUtils が両方の名前空間で利用可能だったので、次の 2 つのオプションを試しました。
test1 の場合、次の例外を受け取ります。
スタックトレース:
test2 の呼び出しは成功しましたがErrorResponse
、 expected ではなく戻り値として typeを受け取りましたOp<list<Y>,list<E>>
。
私はまだ何かを見逃していますか?
.net - ServiceStack.Redis デシリアライゼーションの問題 - JSON が破損する場合がある
オブジェクト (JSON でシリアル化) を格納するために ServiceStack.Redis を使用するサービスを取得しました。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 です。
私が持っている理論は 1 つだけです。マルチスレッドが関係しています。ただし、その場合は「last-write-wins」にする必要があり、破損は発生しません。他の誰かがその行動を見ましたか?
Redis 2.8.9 で ServiceStack 3.9.71 (3.x シリーズの最新リリース) を使用しています。.NET 4.5 Web アプリケーションは Windows でホストされ、Redis サーバーは Linux でホストされています。
c# - ServiceStack 3 で単一サービスとしての JSON 日付シリアル化形式を変更するにはどうすればよいですか?
JSON のデフォルトの日付シリアル化形式を使用する ServiceStack 3 ベースのミドルウェア アプリケーションに多数のレガシー サービスがあります。問題は、これがデバッグ用に人間が判読できないことです。
ISO8061 形式でできる、人間が読める日付を持つようにテストされている新しいサービスが欲しいです。
ServiceStack 3 の場合、単一のサービスまたはサービスごとの JSON 日付シリアル化形式を変更するにはどうすればよいですか? すべてのレガシー サービスのコンシューマーを新しい日付形式で再検証する必要はありません。
....
注: ServiceStack 4 の回答を見つけましたが、HttpResult で ResponseScope を作成するオプションは ServiceStack 3 には存在しないようです。
redis - ServiceStack.Redis v3 と複数のホスト - 推奨されるアーキテクチャ
の複数のインスタンスがRedisMqServer
互いにつまずくという問題が発生しています。1 つのサーバーを停止すると、他のサーバーが停止します。これを実装した方法は明らかに間違っていますがRedisMqServer
、この状況でどのように使用するべきかを特定できません。
当社のインフラストラクチャは次のもので構成されています。
- マスター/スレーブ構成の 2 つの Redis サーバー
- 負荷分散された 2 つの API インスタンス (以下「API A」と呼びます)
- 負荷分散された 2 つの API インスタンス (以下「API B」と呼びます)
API A と B は、ServiceStack.Redis を使用RedisMqServer
して同期メッセージと非同期メッセージの両方を相互に送信する 2 つの独立したアプリケーションです。ServiceStack のオープン ソース v3 リビジョンを使用しています。
RedisMqServer
非同期通信は双方向で行われるため、両方の API が構成されています。
RedisMqServer
が破棄されると、チャネルでメッセージが送信されますSTOP
。mq:topic:in
その結果、サーバーはすべてのチャネルからサブスクライブを解除し、要求の処理を停止します。
ただし、このチャネルは API A と API B の両方で使用されているため、どちらかを停止するともう一方も停止します。
のインスタンスごとに単一の Redis サーバー インスタンスを使用することになっていますRedisMqServer
か?
各 API は、常に単一の Redis サーバーにのみ接続していることに注意してください。スレーブ サーバーは、マスターが使用できなくなった場合にのみ接続されます。