Ich habe versucht, ein REST WCF zu implementieren, um den Unterschied zwischen den Verben PUT und POST zu erkunden. Ich habe eine Datei an einem Ort mit Hilfe des Dienstes hochgeladen.
Die Implementierung des Dienstes sieht folgendermaßen aus:
[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();
}
Der Client-Code lautet wie folgt:
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();
Die Datei wird hochgeladen und als Antwortstatuscode wird "200 OK" zurückgegeben. Der Statuscode ist derselbe, unabhängig davon, ob die Datei am Hochladeort vorhanden ist oder nicht.
Ich habe das REST-Verb in PUT geändert und der Statuscode ist derselbe wie oben.
Kann mir jemand erklären, wie ich die Unterschiede zwischen den Verben in diesem Zusammenhang erkennen kann? Ich war nicht in der Lage, die Generierung kontinuierlicher Anfragen für den Client-Code zu simulieren. Wenn sich das Verhalten dabei unterscheidet, könnte mir jemand dabei helfen, den Clientcode in ordrr zu ändern, um kontinuierliche Anfragen in einer Reihe zu senden?