問題タブ [datasnap]

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 投票する
3 に答える
1511 参照

delphi - 同時実行制御

こんにちは
、3 層アプリケーションで同時実行制御を実装する最良の方法を知りたいですか? 5月の最初の考えは次のとおりです。

  1. クライアントは、データセットからレコードを編集したいと考えています。
  2. そのレコードのロックを要求するリクエストをサーバーに送信します
  3. サーバーはロックテーブルに基づいて編集リクエストを承認/拒否します

このシナリオに基づいて、ロックには、ロックされたレコードとそのレコードを使用しているクライアントの両方への参照が必要です。
クライアントは定期的にキープアライブ メッセージをサーバーに送信する必要があります。キープアライブは、編集操作中にクライアントを失った場合に備えて、ロックされたレコードを解放するために使用されます。

Datasnap で Delphi を使用します。初歩的な質問かもしれませんがよろしくお願いします!!

0 投票する
2 に答える
2284 参照

c# - C#のdatasnapクライアント

Visual Studio 2008(または2010)を使用してC#でデータスナップクライアントを作成する方法は?

datasnapにはado.netプロバイダー(C#)がありますか?

0 投票する
1 に答える
2061 参照

delphi - TRoleAuth属性を反映していないDelphi DataSnap認証

Delphi XE DataSnap アプリケーションで承認を実装しようとしています。これを非常に単純な例に分解しましたが、メソッドまたはクラスの TRoleAuth 属性の効果はまだわかりません。

生成されたサンプル メソッドを含む単純な DSServerMethods クラスを次に示します。クラスは、guest および any の許可された役割と、歓迎されない拒否された役割で装飾されています。ReverseString メソッドは、読み取り専用の拒否されたロールで修飾されています。

OnUserAuthenticate メソッドでロールを割り当てています。たとえば、OnUserAuthenticate から読み取り専用ロールを割り当てているユーザーがいます。このロールは、ReverseString 関数を実行するユーザーのアクセス許可を拒否する必要があると考えています。

私が理解していることから、私のコードは、ユーザーの役割を TDSAuthenticationManager の OnUserAuthorize メソッドからの EventObject.AuthorizedRoles および EventObject.DeniedRoles TStrings と比較し、それに応じてこのメソッドの有効な仮パラメーターを設定する必要があります。

これは、テストに使用している簡単な OnUserAuthorize メソッドです。読み取り専用ロールを持つユーザーが ReverseString を呼び出そうとしたことに応答してデバッガーを使用してステップインすると、EventObject.AuthorizedRoles と EventObject.DeniedRoles はどちらも nil であり、EventObject.Roles には読み取り専用ロールが含まれています。

私はポイントを逃していますか、または TRoleAuth 属性を機能させるためにどこかに設定する必要があるプロパティがありますか?

= = = = = = = = = = 編集: Mat DeLong が回答を提供しました。DSAuth ユニット (TRoleAuth カスタム属性クラスが宣言されている場所) が、DSServerModule の子孫が定義されたユニットのインターフェイス セクションにありませんでした。

0 投票する
1 に答える
1530 参照

delphi - DataSnap「プレーンオールドDelphiオブジェクト」とネストされたオブジェクト

Delphi XEのDataSnapに関する新しい記事では、POJOのJava Enterprise Editionの概念(「プレーンオールドJavaオブジェクト」)と同様に、DataSnapがサーバーとクライアント間でTObjectの子孫を転送できるようになったと説明しています。

このようなPODOに、初期化する必要のあるネストされたオブジェクトタイプのプロパティ(TStringsプロパティなど)がある場合、この新機能は機能しますか?これらのサブオブジェクトはすべてシリアル化され、現在の値で転送されますか?シリアル化されたオブジェクトでは意味をなさないTFileStream、THandle、TThreadなどのシステムリソースプロパティについてはどうでしょうか。これらは「シリアル化不可」としてタグ付けできますか?


DocWikiには、次のような情報があります。

これらは、すでに組み込みの変換/復帰が存在するフィールドです:整数、文字列、文字、列挙型、浮動小数点数、オブジェクト、レコード。次のタイプの場合、フィールド値は無視され、ユーザー変換が期待されます:set、method、variant、interface、pointer、dynArray、classRef、array。

0 投票する
2 に答える
5747 参照

multithreading - DELPHI: マルチスレッド クライアント/サーバー データスナップ エラー

これは私の最初の投稿です - だから優しくしてください :-)

データ転送に datasnap を使用するクライアント/サーバー アプリケーションを構築したいと考えています。これはかなり単純な作業です。多くの例から学ぶことができます。しかし - Datasnap サーバー (Delphi XE ウィザードからビルド) を持っていると、問題が発生します。誰かが私を正しい方向に導いてくれることを願っています。

サーバーとクライアントは同じ PC で実行されます (これが現在の設計です)。サーバーはセッション ライフサイクルを実行しています。サーバーとクライアントはクラスを共有します (以下に掲載)。

サーバーは、GetNewObject メソッドを使用する単純なメソッド GetServerObject を提供します。サーバー自体は VCL アプリケーションです。メイン フォームは fmServer です。OnCreate はサーバーの FormObject プロパティ (FormObject := TMyDataObject.Create) を開始します。

これはすべて非常に些細なことです-そして、私の問題は、クライアントアプリケーションをマルチスレッドモンスターにひねった場合にのみ発生します:-) (読み取り-複数のスレッド)。

クライアントのスレッド コードは次のとおりです。

これらのスレッドを複数作成すると、最終的にエラーが発生します(「インスタンス化できません...」または「リモートdbxエラー...」など..

私は単にこれを機能させることができません.datasnapサーバーへの何百ものスレッド/接続を生成することができます.

この質問がトリッキーであることは承知していますが、誰かが私よりも賢いことを願っています :-)

同じクライアント スレッド コードを試して、より単純なサーバー メソッド (サンプルの echostring など) にアクセスすると、何百ものスレッドで実行できます。おそらく私はここで自分自身に答えています-しかし、私はそれを理解するには盲目すぎます:-)

すべての助けに感謝します

0 投票する
2 に答える
3493 参照

delphi - Delphidatasnapコールバック-BroadCastの質問

私は再び、datasnapコールバックサンプルを自分のニーズに合わせてカスタマイズしようと猥褻な時間を費やしている状況にあります。私は古い学校のOOPプログラマーであり、「ツールボックス」PODOスタイルにいくつかの非常に大きなオブジェクト階層があります:-) ..そしてこの素晴らしいデータスナップ機能を持っているので、コールバックの力を利用したいと思います。

しかし-私がそれを実装するとき...それは単に失敗します...(FASTMM4はmemリークを報告します)。

単純なVCLデータスナップサーバー(TCP)を作成してみてください。そして、ボタンとこのソースを追加します...

TJSONValueを使い続ける限り、それは機能します...しかし、コメント付きのコードを切り替えてみてください。そうすれば、私が何を意味するのかがわかります。

もちろん、既存のすべてのコードをJSONに変更することもできますが、それは単に受け入れられません。

BroadcastOBJECTまたはNotifyOBJECTの使用方法について誰かが何か考えを持っていますか?

よろしくBjarne

0 投票する
4 に答える
6636 参照

delphi - DatasnapxeとRemobjectsDataAbstract

この質問をした後、必要なものを構築するには、「RESTおよびJSON対応」のフレームワークに依存する方がよいことに気付きました。

私はDelphiProfessionalを所有しているので、DataSnapを使用するにはEnterpriseにアップグレードする必要があります。

これで、アップグレードコストはDataAbstractコストと同じ範囲になります。更新:さらに、Delphi Professionalの新しいバージョン+新しいバージョンのDAへの将来のアップグレードは、かさばるEnterpriseアップグレード(XEからXE2など)を購入するよりも低コストになります。

ここでRemObjectsの人々は「プロフェッショナルと連携する」と言っているので、このフレームワークも検討します。さらに、DataSnapはXEバージョンからのみ非常に優れているようです(私はこれを読みましたが、試しませんでした)が、RemObjectsにはより確かな過去があります。

したがって、すべての製品を知っている人は、これらの機能について特にそれらを比較できます。

  • RESTサーバー(JSONを提供するため)
  • 使いやすさ

どの製品を提案しますか?

報奨金に関する注記: これが答えられないのが気に入らないので、報奨金を開始します。DatasnapまたはRemObjectsを使用している人は誰でも、元の質問に答えられることを願っています。

0 投票する
2 に答える
1529 参照

delphi - Delphi XEのDataSnapパッケージを新しい/異なるバージョンのIndyで再コンパイルすることは可能ですか?

わかりました-興味深い問題があります。

いくつかの背景:

  1. メインアプリケーションはIndy10を使用しますが、Indy 10ソースを取得してバグを修正し、再コンパイルして、独自のIndyコンポーネントのセットをインストールします。

  2. Delphi XEに移行しており、DataSnapの使用を開始したいと考えています。

  3. DataSnapには、カスタマイズされたバージョンのIndyと互換性のない「公式の出荷」バージョンのIndyが必要です。

  4. DataSnapサーバーは個別のアプリケーションになりますが、IDEに独自のIndyがインストールされているため、「ストリームを横断」することはできません。

したがって、この互換性の問題のため、DelphiXEのDataSnapをそのまま使用することはできません。

だから私の質問はこれです:

Delphi XEのDataSnapパッケージを新しい/異なるバージョンのIndyで再コンパイルすることは可能ですか?

あなたの考えはありがたいことに受け入れられました。

0 投票する
1 に答える
760 参照

delphi - DataSnapXEでパブリックIPアドレスにアクセス/DataSnapFrameworkを再コンパイル

DSTCPServerTransport.pasの「procedureTDSTCPChannel.Open」メソッドは、「FChannelInfo」を割り当てるときに、接続されたユーザーのプライベートIPアドレスを使用します。HTTPトランスポートをトレースすると、ユーザーのパブリックIPが使用されました。DSTCPServerTransport.pasが次のように更新された場合

に変更されました

その場合、DSTCPServerTransport.pasはHTTPトランスポートの実装と一致し、接続されたユーザーのパブリックIPアドレスは、TCP接続の場合も「DSConnectEventObject.ChannelInfo.Info」を介してTDSServer.OnConnectイベントで使用できます。何人かの開発者がこれらの2つのEBTディスカッションでこれについて議論しました:ディスカッション#1ディスカッション#2。このためのQC#は#91030です。

自分で変更を加えようとしましたが、DataSnap Frameworkを再コンパイルできないことを知りました(ここを参照)。

これはXE2で修正されますか、および/またはエンドユーザーはXE2でDataSnapフレームワークを再コンパイルできますか?この修正を含むXE2より前のDataSnapへのパッチはありますか?

ありがとう、ジェームズ

0 投票する
2 に答える
5771 参照

delphi - TDataSetProvider.OnUpdateData のフィールド値を変更する方法

TDataSetProvider.OnUpdateData イベントの説明に関する Delphi ヘルプ ファイルを読んだ後:

  1. データを調べて (たとえば、許可されるべきではない値やデータの変更について)、更新が発生する前に適用をキャンセルする例外を発生させます。
  2. ソース データセットまたはデータベース サーバーに送信される前に、データを変更します (たとえば、値の暗号化または復号化)。

OnUpdateData のデータを変更する方法のサンプル コードを探しています。私は解決策を探すために最善を尽くしました。これは私が達成できるものです:

例 1 :

例 1 の問題: 残念ながら、一部のフィールド値が欠落しているというエラーが表示され続けます。いくつかのデバッグを実行した後、値が空の必須フィールドがあることがわかりました。

例 2:

例 2 の問題: このように記述すると、DataSet.Edit と DataSet.Post を呼び出す必要がなくなります。しかし、TField.NewValue に設定された値「zzz」はデータベースに保存されていません。

この更新は、BeforeUpdateRecord/AfterUpdateRecord ではなく OnUpdateData で実行する必要がある特別な理由があります。

ご意見をお聞かせください。どうもありがとうございました。