【问题标题】:Return pdf file from WCF service?从 WCF 服务返回 pdf 文件?
【发布时间】:2013-10-23 18:19:53
【问题描述】:

我有一个 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 新手

【问题讨论】:

标签: asp.net wcf


【解决方案1】:

美好的一天!

引自《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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多