4
我試圖實現REST WCF,以便探究PUT和POST動詞之間的區別。我已經使用該服務在一個位置上升了一個文件。使用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();
}
客戶端代碼如下:
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」。 satus代碼在上傳位置存在或不存在文件的情況下是相同的。
我已將REST動詞更改爲PUT,狀態碼與上面相同。
有人可以解釋一下,我怎麼能夠在這種情況下找出動詞之間的區別?我無法模擬生成連續的客戶端代碼請求。如果這樣做的行爲會有所不同,任何人都可以幫助我修改ordrr中的客戶端代碼以連續發送連續的請求嗎?
就理論概念而言,這是真的。但在我的情況下,即使在使用POST動詞多次運行客戶端程序之後,也沒有生成多個上傳文件的副本。運行客戶端程序多次,導致PUT和POST動詞在上述示例的上下文中具有相同的行爲。有人可能會提出,在這個例子中,爲了重現動詞之間的區別,需要進行什麼樣的修改? – techmad
爲什麼在使用PUT vs POST時預期結果會有所不同? –
那麼我怎麼理解,PUT和POST動詞以不同的方式工作?我想用WCF REST或其他一些.NET程序來證明這兩個REST動詞的不同行爲。如果我的例子不能證明是一樣的,請給我一個實現的例子嗎? – techmad