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 秒の遅延が発生します (可能な限り高速になるようにすべてのプロキシ修正を行いました)。
どんな助けでも大歓迎です。