2017-03-08 125 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项目代码有什么问题?