【问题标题】:How to Send and receive excel data using web service如何使用 Web 服务发送和接收 Excel 数据
【发布时间】:2016-06-28 06:06:29
【问题描述】:

如何使用网络服务发送和接收 Excel 数据

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

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;
        }
}

我是网络服务的新手,这是我的第一个应用程序。所以请帮助我。 提前致谢。

【问题讨论】:

    标签: c# excel web-services wcf rest


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多