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

时间:2016-06-28 06:06:29

标签: c# excel web-services wcf rest

如何使用网络服务发送和接收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;
        }
}

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

1 个答案:

答案 0 :(得分:1)

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

containerBuilder.RegisterType<StatisticsLogger>()
                .WithParameter("logger", LogManager.GetLogger("Statistics").Logger)
                .As<IStatisticsLogger>();

界面 -

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
}