1

C# を使用して VS2012 でかなり基本的な REST Web サービスを作成しました。私が取ったアプローチは、一例で以下に示されています。

[OperationContract]
[WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "OpenSession/{key}/{source_userid}/{source_id}/{source_version}/{source_ip}")]
string OpenSession(string key, string source_userid, string source_id, string source_version, string source_ip);

コードは正常に機能し、サービスは稼働しています。応答を取得し、トークンが配布されます。サービスはログ記録用に構築されているため、データを URL にラップするだけで問題ないと考えました。したがって、最終的に呼び出しは次のようになります (たとえば)。

www.service.site/service.svc/2/5/12/HELLO

(ところで、RESTサービスを維持しながらこれを行うより良い方法がある場合はお知らせください)

私が抱えている問題は...どうすればこれを適切にテストできますか? このサービスへの 1,000 の同時ヒットをシミュレートする必要があり、これを行うためのカスタム C# Windows アプリケーションを構築しましたが、多くの問題が発生しています。

まず、HttpWebRequest とストリーム リーダー/ライターを使用して、管理可能な形式でデータを適切に送受信する方法がわかりません。リクエストにはGETメソッドやPUTメソッドなどがありますが、正直なところ、投稿データとURL情報を分離する頭や尾を作ることができないようです。私の知る限り、すべてのデータが URL 要求自体に埋め込まれているため、実際にはデータを投稿していません。これは正しいです?

また、操作コントラクトと互換性を持たせるために HttpWebRequest を設定する「コンテンツ タイプ」がわかりません (JSON の列挙を見ることはできますが、「テキスト」とは何ですか?)

その上、HttpWebRequest は非常に遅いです。サービスへの URL を直接開くと (例: "http://localhost:51849/Scribe.svc")、高速ですが、2 番目にメソッドを呼び出そうとします (例: "http://localhost:51849/")。 Scribe.svc/GetStatus")、1.5 ~ 2 秒の遅延が発生します (可能な限り高速になるようにすべてのプロキシ修正を行いました)。

どんな助けでも大歓迎です。

4

3 に答える 3

0

パフォーマンスツールの使用を検討する必要があるかもしれません。たくさんあり、それらはあなたの目的に適したものを簡単に見つけることができるはずです。Jmeterは良いオプションかもしれません。

これは、Jmeterを使用してRESTWebサービスをテストする方法を示すガイドです。

それがお役に立てば幸いです。

于 2012-10-29T19:20:54.310 に答える
0

このユーティリティを知っているかどうかはわかりません: SoapUI

これを使用してサービスを参照し、サービスをテストするためのリクエストを生成できます。

インストールは非常に簡単です。インストール後、ファイル/新しい SoapUI プロジェクトをクリックする必要があります。次に、ポップアップ ウィンドウで、次のように「Initial WSDL/WADL:」フィールドにサービスの wsdl を入力します。

http://localhost:51849/Scribe.svc?wsdl

サービスへの呼び出しを正しく行うためのクライアントが生成されます。soap ui を使用すると、多数の呼び出しを実行してサービスに負荷をかけることをテストすることもできます。これは、サービスをテストする良い方法です。

私の知る限り、すべてのデータが URL 要求自体に埋め込まれているため、実際にはデータを投稿していません。これは正しいです?

はい。それがGETリクエストの仕組みです。データは URL に渡されます。サーバー上のデータの状態を変更しない場合にのみ GET 要求を使用する必要があります。それ以外の場合は、post を使用する必要があります。

サーバー上のデータを作成/更新するときに使用する PUT メソッド。

お役に立てば幸いです。

よろしく、ロドリゴ

于 2012-10-29T19:13:23.707 に答える
0

回答ありがとうございます。私は実際にテストシステムを稼働させており、数千のタイマー制御セッションでサービスを非難することができます. PUT リクエストの問題を回避する鍵は、空の設定を使用することでした。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "PUT";
req.ContentType = "application/json";
req.ContentLength = 0;

私はこれらのツールを調べましたが、私の特定のニーズに対しては、タイマー制御のカスタム アプリを作成するのが最善の方法であることがわかりました。

遅延がまだ問題なのか、それともデバッグ状態に関連しているのかはわかりません。サービスを Azure に公開してリモートでテストすると、サービス ベースの接続に遅延の問題があるかどうかがよくわかります...

于 2012-10-30T18:52:03.843 に答える