2011-07-13 129 views
2

我有一個.NET 3.5 WCF服務。它看起來像這樣:將文件上傳到WCF 3.5服務

namespace FileUploaderWcfRestService 
{ 
    [ServiceContract] 
    interface IUploaderService 
    { 
     [OperationContract(IsOneWay = true)] 
     [WebInvoke(Method = "POST", UriTemplate = "/UploadFile?fileName={fileName}")] 
     void UploadFile(string fileName, Stream fileContents); 
    } 

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class UploaderService : IUploaderService 
    { 
     public void UploadFile(string fileName, Stream fileContents) 
     { 
      // save to disk code 
     } 
    } 
} 

在web.config中,我有端點設置如下:

<endpoint address="" 
     binding="webHttpBinding" 
     contract="FileUploaderWcfRestService.IUploaderService"> 

在客戶端,我嘗試用WebClient的對象調用它,但總是得到錯誤415(不支持的媒體類型)。

var wc = new WebClient(); 
string url = "http://localhost:23619/UploaderService.svc/UploadFile?fileName=todo.sdf"; 

byte[] data = GetBytesFromFile("ToDo.sdf"); // gets the file into a byte array 
byte[] resp = wc.UploadData(url, "POST", data); 

我試過不同的URL變體,但沒有任何幫助。 我在這裏錯過了什麼?

回答

4

您是否嘗試過將WebClient上的ContentType標頭設置爲文件的內容類型?

wc.Headers.Add("Content-Type","application/octet-stream"); 
+0

哇,謝謝。完美工作。 – AngryHacker