PUTとPOST動詞の違いを調べるためにREST WCFを実装しようとしました。私は、サービスを使用している場所にファイルをアップロードしました。WCF RESTを使ったPUTとPOSTの違い
[OperationContract]
[WebInvoke(UriTemplate = "/UploadFile", Method = "POST")]
void UploadFile(Stream fileContents);
public void UploadFile(Stream fileContents)
{
byte[] buffer = new byte[32768];
MemoryStream ms = new MemoryStream();
int bytesRead, totalBytesRead = 0;
do
{
bytesRead = fileContents.Read(buffer, 0, buffer.Length);
totalBytesRead += bytesRead;
ms.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
using (FileStream fs = File.OpenWrite(@"C:\temp\test.txt"))
{
ms.WriteTo(fs);
}
ms.Close();
}
クライアントコードは、次の通りである:
サービス実装はfolowing通りである
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:1922 /EMPRESTService.svc/UploadFile");
request.Method = "POST";
request.ContentType = "text/plain";
byte[] fileToSend = File.ReadAllBytes(@"C:\TEMP\log.txt"); // txtFileName contains the name of the file to upload.
request.ContentLength = fileToSend.Length;
using (Stream requestStream = request.GetRequestStream())
{
// Send the file as body request.
requestStream.Write(fileToSend, 0, fileToSend.Length);
//requestStream.Close();
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription);
Console.ReadLine();
ファイルがアップロードされ、応答ステータスコードは次のように戻されている
"200 OK"。アップロードの場所にファイルが存在するか存在しない場合にも、同じステータスコードが使用されます。
REST動詞をPUTに変更しました。ステータスコードは上記と同じです。
誰でも説明できますが、どのようにしてこの文脈の動詞の違いを特定できますか?私は、継続的なリクエストfronクライアントコードの生成をシミュレートできませんでした。そのような動作が異なる場合は、ordrrのクライアントコードを修正して、継続的なリクエストを連続して送信することができますか?
理論的概念については真です。しかし、私のケースでは、クライアントプログラムを複数回実行した後でも、アップロードされたファイルの複数のコピーは生成されていません。クライアントプログラムを複数回実行すると、上記の例のコンテキストでPUTおよびPOST動詞の動作が同じになりますこの動詞の違いを再現するために、この例ではどのような変更が必要なのか、誰かが提案することができますか? – techmad
PUTとPOSTを使用すると結果に差異が生じるのはなぜですか? –
それでは、どうやってPUTとPOSTの動詞が違うのか理解できますか? WCF RESTやその他の.NETプログラムを使用して、これらの2つのREST動詞の異なる動作を証明したいと思います。私の例で同じことが証明できない場合は、実装された例を教えてください。 – techmad