2016-06-28 81 views
0

如何练成发送数据和接收使用Web服务如何发送和接收使用Web服务

我创建了一个Web应用程序发送excel文件数据到一个web服务Excel数据。

protected void Page_Load(object sender, EventArgs e) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:58959/RESTServiceImpl.svc/PostFile"); 

     request.ContentType = "application/vnd.ms-excel"; 
     request.Headers.Add("filename", "fooBar.xls"); 
     request.Method = WebRequestMethods.Http.Post; 

     byte[] fileData = System.IO.File.ReadAllBytes("C:\\Users\\Public\\Documents\\Forecast Pro TRAC\\Input\\Book1.xls"); 
     request.ContentLength = fileData.Length; 

     using (System.IO.BinaryWriter postStream = new System.IO.BinaryWriter(request.GetRequestStream())) 
     { 
      postStream.Write(fileData); 
      postStream.Flush(); 
      postStream.Close(); 
     } 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     System.Diagnostics.Debug.Assert(response.StatusCode == HttpStatusCode.OK); 

     string responseMessage = string.Empty; 
     using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream())) 
     { 
      responseMessage = sr.ReadToEnd(); 
     } 
     System.Diagnostics.Debug.WriteLine(responseMessage); 
    } 

现在我需要从WCF应用程序接收该excel数据。所以我做了类似下面的代码。我得到了我发送的总字节数。我需要在两端发送和接收excel数据的具体事情是什么。

[ServiceContract] 
public interface IRESTServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = "PostFile")] 
    string PostFile(); 
} 
public class RESTServiceImpl : IRESTServiceImpl 
{ 
    public string PostFile() 
    { 
     var httpRequest = HttpContext.Current.Request; 

     var bites = httpRequest.TotalBytes; 

     return httpRequest.FilePath; 
     } 
} 

我是非常新的网络服务,这是我的第一个应用程序。所以请请帮助我。 在此先感谢。

回答

1

我已经解决了解决方案,这里是工作的代码

public class RestServiceImpl : IRestServiceImpl 
{ 
    public string PostFileRest(Stream fileContents) 
    { 
     var httpRequest = HttpContext.Current.Request; 

     var filePath = "C:\\file.xls"; //excel filePath for local 

     var bites = httpRequest.TotalBytes; 

     //Convert stream to byte array 
     byte[] reqBytes = readRequest(fileContents, bites); 
     byte[] decodedReqBytes = HttpUtility.UrlDecodeToBytes(reqBytes); 

     string json = System.Text.Encoding.UTF8.GetString(reqBytes); 
     DataTable dt = JsonConvert.DeserializeObject<DataTable>(json); 

     MemoryStream stream = new MemoryStream(reqBytes); 
     FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write); 
     stream.WriteTo(file); 
     file.Close(); 
     stream.Close(); 

     return json ; 
    } 

    #region Convert Stream to byte array 
    private byte[] readRequest(Stream fileContents, int bites) 
    { 
     System.IO.MemoryStream memStream = new System.IO.MemoryStream(); 
     int BUFFER_SIZE = bites; 
     int iRead = 0; 
     int idx = 0; 
     Int64 iSize = 0; 
     memStream.SetLength(BUFFER_SIZE); 
     while (true) 
     { 
      byte[] reqBuffer = new byte[BUFFER_SIZE]; 
      try 
      { 
       iRead = fileContents.Read(reqBuffer, 0, BUFFER_SIZE); 
      } 
      catch (System.Exception e) 
      { 
       System.Diagnostics.Debug.WriteLine(e.Message); 
      } 

      if (iRead == 0) 
      { 
       break; 
      } 

      iSize += iRead; 
      memStream.SetLength(iSize); 
      memStream.Write(reqBuffer, 0, iRead); 
      idx += iRead; 
     } 

     byte[] content = memStream.ToArray(); 
     memStream.Close(); 
     return content; 
    } 
    #endregion 
} 

的界面 -

[ServiceContract] 
public interface IRestServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "PostFileRest")] 
    string PostFileRest(Stream fileContents); 
} 
相关问题