2017-03-08 123 views
0

我用下面這些代碼發送文件到一個web服務的SOAP方法:上傳文件到web服務URL

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://DomainName.com/WebService.asmx?op=SaveVideoHere"); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 

byte[] fileData = null; 
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream)) 
{ 
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength); 
} 
request.ContentLength = fileData.Length; 

Stream requestStream = request.GetRequestStream(); 
requestStream.Write(fileData, 0, fileData.Length); 

WebResponse response = request.GetResponse(); 
Stream stream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(stream); 

var result = reader.ReadToEnd(); 
stream.Dispose(); 
reader.Dispose(); 

在web服務:

[WebMethod] 
public void SaveVideoHere() 
{ 
    if (HttpContext.Current.Request.Files[0] != null) 
    { 
     this.Context.Response.ContentType = "application/json; charset=utf-8"; 
     this.Context.Response.Write(HttpContext.Current.Request.Files[0].FileName); 
     return; 
    } 
} 

但文件沒有發送和有此錯誤


Additional information: The remote server returned an error: (500) Internal Server Error.

我必須做什麼?

+0

狀態碼500意味着您的webservice方法有問題。交叉檢查你的webservice代碼 – Ritz

+0

這就是我的意思。您調用的webservice方法有一些邏輯問題,無法完成傳入請求的執行。所以如果你是http://DomainName.com/WebService.asmx的作者,那麼驗證它是否正常工作 – Ritz

+0

@ Ritz,謝謝你,通過你的指導解決了它。在我的webservice方法中'if(HttpContext.Current.Request.Files [0]!= null)'是錯誤的,並且必須使用if(HttpContext.Current.Request.Files.Count!= 0)'替換它。 – parsa

回答

0

在我的web服務中,我使用了下面的代碼。

if (HttpContext.Current.Request.Files.Count != 0) 
{ 
    if (HttpContext.Current.Request.Files[0].ContentLength > 0) 
    { 
     string ServerPath = Server.MapPath("/storage/"); 
     HttpContext.Current.Request.Files[0].SaveAs(ServerPath + HttpContext.Current.Request.Files[0].FileName); 
     this.Context.Response.ContentType = "application/json; charset=utf-8"; 
     this.Context.Response.Write(HttpContext.Current.Request.Files[0].FileName); 
     return; 
    } 
} 

我用郵差測試過它沒問題。我的意思是我的web服務把文件保存到路徑中。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WebServiceOfServer); 
request.Method = "POST"; 
//request.ContentType = "application/x-www-form-urlencoded"; 
request.KeepAlive = true; 
request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo); 
request.ContentType = "multipart/form-data; boundary=" + boundary; 

byte[] fileData = null; 
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream)) 
      { 
       fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength); 
      } 
      request.ContentLength = fileData.Length; 

      Stream requestStream = request.GetRequestStream(); 
      requestStream.Write(fileData, 0, fileData.Length); 

      WebResponse response = request.GetResponse(); 
      Stream stream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(stream); 

      var result = reader.ReadToEnd(); 
      stream.Dispose(); 
      reader.Dispose(); 

,但是當我把文件與Web窗體我的項目,我的web服務的側面只是文件的ContentLength存在,無法接收文件。 Request.Files.Count是0. 我的webform項目代碼有什麼問題?