我目前正在努力實現向WCF REST服務的文件上載。發送到WCF REST服務的數據不會轉到流輸入參數
客戶端執行以下操作:
void uploadFile(string serverUrl, string filePath)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.
Create(serverUrl);
request.Method = "POST";
request.ContentType = "multipart/form-data";
request.SendChunked = true;
request.Timeout = 60000;
request.KeepAlive = true;
using(BinaryReader reader = new BinaryReader(
File.OpenRead(filePath))) {
request.ContentLength = reader.BaseStream.Length;
using(Stream stream = request.GetRequestStream()) {
byte[] buffer = new byte[1024];
while(true) {
int bytesRead = reader.Read(buffer, 0, buffer.Length);
if(bytesRead == 0) {
break;
}
stream.Write(buffer, 0, bytesRead);
}
}
}
HttpWebResponse result = (HttpWebResponse)request.GetResponse();
//handle result - not relevant
}
其中serverUrl
爲 「http://本地主機:/Service1.svc/UploadFile」。
的WCF REST服務具有以下簽名的方法:
[OperationContract]
[WebInvoke(Method="POST")]
string UploadFile(System.IO.Stream fileData);
這是實現如下:
public string UploadFile(System.IO.Stream fileData)
{
byte[] buffer = new byte[1024];
while(true) {
int readAmount = fileData.Read(buffer, 0, buffer.Length);
if(readAmount == 0) {
break;
}
}
return "";
}
當我啓動服務並運行客戶機代碼將出現以下情況。
客戶端啓動while循環,控件進入服務方法,服務器啓動while循環。服務器上的Read
返回零,控件通過服務器方法返回。同時,客戶端嘗試撥打Write()
- 「無法將數據寫入傳輸連接:現有連接被遠程主機強行關閉」。
對我來說,它看起來像我試圖流入請求的文件數據只是沒有映射到服務器方法參數。我究竟做錯了什麼?
我嘗試了所有這一切,但沒有多大幫助。沒有Fiddler它不起作用,客戶端現在拋出一個異常「底層連接已關閉:接收發生意外錯誤」,請求到達服務器並且服務器行爲與以前相同。使用Fiddler,我在客戶端上獲得HTTP 502 Bad Gateway,並且請求沒有到達服務器,請求在提琴手中看起來合理。 – sharptooth 2011-01-21 13:57:27