2012-05-13 13 views
4

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のクライアントコードを修正して、継続的なリクエストを連続して送信することができますか?

答えて

2

POST動詞は、新しいリソース(あなたのケースのファイル)を作成しているときに繰り返し使用されると、サーバー上に複数のリソースが作成されます。同名のファイルを複数回アップロードすると、サーバー上に複数のファイルが作成される場合は、この動詞が意味を持ちます。

PUT動詞は、既存のリソースを更新している場合や、定義済みのIDを持つ新しいリソースを作成している場合に使用されます。複数の操作によって、サーバー上の同じリソースが再作成または更新されます。この動詞は、2番目、3番目の時間に同じ名前のファイルをアップロードすると、以前にアップロードされたファイルを上書きする場合に意味があります。

+0

理論的概念については真です。しかし、私のケースでは、クライアントプログラムを複数回実行した後でも、アップロードされたファイルの複数のコピーは生成されていません。クライアントプログラムを複数回実行すると、上記の例のコンテキストでPUTおよびPOST動詞の動作が同じになりますこの動詞の違いを再現するために、この例ではどのような変更が必要なのか、誰かが提案することができますか? – techmad

+0

PUTとPOSTを使用すると結果に差異が生じるのはなぜですか? –

+0

それでは、どうやってPUTとPOSTの動詞が違うのか理解できますか? WCF RESTやその他の.NETプログラムを使用して、これらの2つのREST動詞の異なる動作を証明したいと思います。私の例で同じことが証明できない場合は、実装された例を教えてください。 – techmad

関連する問題