接受文件并从C#WebService返回文件
本文关键字:文件 C#WebService 返回 | 更新日期: 2023-09-27 18:29:22
如何在C#中创建一个WebService,该WebService将在一次调用中接受文件,然后同时返回一个文件(同步)。我想做的是创建一个接受MS Office文档的WebService,将该文档转换为PDF,然后将该文件返回给调用者(在我的情况下,我使用Java作为客户端)
正如silvermind在评论中所说,最好的选择是在Web服务中接受并返回一个字节数组。
您可以使用以下方法将文件加载为字节数组:
public byte[] FileToByteArray(string _FileName)
{
byte[] _Buffer = null;
try
{
System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream);
long _TotalBytes = new System.IO.FileInfo(_FileName).Length;
_Buffer = _BinaryReader.ReadBytes((Int32)_TotalBytes);
_FileStream.Close();
_FileStream.Dispose();
_BinaryReader.Close();
}
catch (Exception _Exception)
{
Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
}
return _Buffer;
}
此外,如果您已经将Web服务实现为WCF服务,则可能需要调整一些设置,以增加可以发送的信息数量和超时时间。这是允许这样做的绑定配置的示例。(只有一个样品,可能不符合您的需求)
<binding name="WebServiceBinding" closeTimeout="00:02:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:02:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
您可以将少量二进制数据编码为base64字符串。
这里有一些来自不同来源的教程,这也取决于您使用的是wcf或asmx。我还认为你必须创建两个单独的函数和另一个函数,它们将同时调用发送和恢复,尽管你可能希望在收到发送之前有一段时间
http://support.microsoft.com/kb/318425
http://www.zdnetasia.com/create-a-simple-file-transfer-web-service-with-net-39251815.htm
https://stackoverflow.com/questions/4530045/how-to-transfer-file-through-web-service
最简单的方法是将ASP.net MVC3框架的基本库集成到您的基本Web项目中,然后用一个返回FileResult类型对象的方法编写一个简单的MVC控制器。
Scott Hanselman发表了一篇关于在几分钟内做到这一点的精彩博客文章:http://www.hanselman.com/blog/IntegratingASPNETMVC3IntoExistingUpgradedASPNET4WebFormsApplications.aspx
它工作得非常好,不到3分钟就完成了(在MVC3框架集成之后)。已经有一篇关于MVC中文件返回的stackoverflow帖子:如何在ASP.NET MVC中创建文件并通过FileResult返回?
问候,