从WCF服务返回pdf文件?

时间:2013-10-23 18:19:54

标签: asp.net wcf

我有一个WCF服务,我希望其服务方法之一访问pdf文件并将其转换为流或其他东西并将流返回到我的Web应用程序,我将把该流转换回一个pdf文件。

哪种方法更好,将pdf转换为Streambyte[]数组?

这是我的方法

 public byte[] GetPdf(string Address)
 {
    byte[] bytes = System.IO.File.ReadAllBytes(Address);
    return bytes
 }

现在在我调用此WCF服务的Web应用程序中,我想使用这些字节并将它们转换回pdf。这是正确的方法,因为我不确定将文件作为流返回正确还是返回byte[]是正确的

但是当我为测试目的运行服务时,我收到了错误

  

已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。

我如何解决这个问题,我没有添加任何绑定或任何东西,一切都是默认的,因为我是WCF的新手

1 个答案:

答案 0 :(得分:2)

美好的一天!

引用书籍“Programming WCF Services”作者Juval Lowy:

  

默认情况下,当客户端和服务交换消息时,   这些消息在接收端缓冲并传送   只有在收到整个邮件后才会收到。这是真的   无论是客户端向服务发送消息还是发送消息   服务将消息返回给客户端。结果,当   客户端调用该服务,该服务仅在调用之后调用   客户的消息已全部收到;同样地,   只有返回的消息带有结果后,客户端才会被解除阻止   已完全收到调用。足够了   小消息,这种交换模式提供了一个简单的程序 -   ming模型,因为接收消息引起的延迟是   与消息处理本身相比通常可以忽略不计。   但是,当涉及更大的消息时 - 例如涉及的消息   多媒体内容,大文件或批量数据阻止,直到   收到的整条信息可能不切实际。处理   在这种情况下,WCF启用接收方(无论是客户端还是客户端)   service)在消息开始处理消息中的数据   仍在接收该频道。这种处理方式是   称为流传输模式。使用大型有效负载,流式传输   提供了更高的吞吐量和响应能力   在消息出现时,接收或发送方被阻止   发送或接收

对于传输文件,我推荐使用带有异步模式的Stream。

 [ServiceContract(SessionMode = SessionMode.NotAllowed)]
    public interface ITerrasoftFiles
    {
        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginGetFiles(Guid ID, AsyncCallback asyncCallBack, object asyncState);

        Stream EndGetFiles(IAsyncResult res);

        [OperationContract]
        FileInfo GetFileInfo(Guid ID);
    }

在Web.config中设置 transferMode =“StreamedResponse”

<bindings>
      <netTcpBinding>
        <binding name="tcpTerrasoftFiles" transferMode="StreamedResponse">
          <security mode="None" />
        </binding>
      </netTcpBinding>
</bindings>
 <services>
    <service name="TWebServices.Services.TerrasoftFiles">
      <endpoint address="" 
                  binding="netTcpBinding" bindingConfiguration="tcpTerrasoftFiles" 
                  contract="TWebServices.Services.ITerrasoftFiles" />
      <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
     </service>
 </services>