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의 클라이언트 코드를 수정하여 연속적인 요청을 보내도록 도울 수 있습니까?
이론적 개념에 관한 한 사실입니다. 하지만 내 경우에는 POST 동사를 사용하여 클라이언트 프로그램을 여러 번 실행 한 후에도 업로드 된 파일의 사본이 여러 번 생성되지 않았습니다. 클라이언트 프로그램을 여러 번 실행하면 위의 예의 컨텍스트에서 PUT 및 POST 동사에 대해 동일한 동작이 발생합니다 어떤 사람이 제안 했는가?이 예에서 어떤 종류의 수정이 필요한가? 동사 간의 차이를 재현하려면? – techmad
PUT 대 POST를 사용할 때 결과에 차이가 나는 이유는 무엇입니까? –
그러면 어떻게 이해할 수 있습니까? PUT 및 POST 동사가 다른 방식으로 작동합니까? WCF REST 또는 다른 .NET 프로그램을 사용하여이 두 가지 REST 동사의 다른 동작을 증명하고 싶습니다. 예제가 동일하지 않다면 구현 된 예제를 제공해 주시겠습니까? – techmad