Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays PDF、WCFs和IFAME_Arrays_Wcf_Pdf_Stream_Byte - Fatal编程技术网

Arrays PDF、WCFs和IFAME

Arrays PDF、WCFs和IFAME,arrays,wcf,pdf,stream,byte,Arrays,Wcf,Pdf,Stream,Byte,现在,当我认为我完成了这个小项目时,他们又给了我一条曲线 我有两个WCF。一个托管在IIS中,另一个托管在另一台服务器上的自托管服务中 自托管服务中的函数以字节()的形式返回PDF。IIS中的WCF调用该函数,然后使用System.IO.FileStream将PDF写入intepub。aspx执行回调,并使用显示pdf的动态iFrame重新加载页面。对我来说已经足够好了,但对老板来说还不够好 不知何故,我必须获得第二个WCF,以便将PDF传回我的ASP应用程序,而不将其保存到磁盘 我需要像这样的

现在,当我认为我完成了这个小项目时,他们又给了我一条曲线

我有两个WCF。一个托管在IIS中,另一个托管在另一台服务器上的自托管服务中

自托管服务中的函数以字节()的形式返回PDF。IIS中的WCF调用该函数,然后使用System.IO.FileStream将PDF写入intepub。aspx执行回调,并使用显示pdf的动态iFrame重新加载页面。对我来说已经足够好了,但对老板来说还不够好

不知何故,我必须获得第二个WCF,以便将PDF传回我的ASP应用程序,而不将其保存到磁盘

我需要像这样的东西:

iFrameControl.Attributes.Add("src", ServiceReference1.GetPDF_Byte())
有办法吗

提前感谢,,
Jason在C中的其他地方找到了它,并进行了转换,在这里发布,以防其他人需要它

答:创建一个新类(Globals.vb)来容纳一个可以从两个页面访问的字节数组,然后创建一个新页面并进行响应。二进制在页面加载中写入字节数组,并将iFrame的src设置为新(空白)页面


在C中的其他地方找到它并进行了转换,在这里发布,以防其他人需要它

答:创建一个新类(Globals.vb)来容纳一个可以从两个页面访问的字节数组,然后创建一个新页面并进行响应。二进制在页面加载中写入字节数组,并将iFrame的src设置为新(空白)页面


如果我理解正确,在ASPX页面中有一些操作会导致对第一个服务(WCF1,托管在IIS中)进行调用(可能传递一些参数),而该服务又会从另一台机器调用第二个服务(WCF2);WCF1从WCF2检索PDF,将其保存在inetpub本地,并返回保存文件的URL;然后,ASPX页面上的回调调用使用该URL在iFrame上显示PDF

一个简短的回答:您不能使用服务引用来做您需要的事情(ServiceReference1.GetPDF_Byte())-控件(或任何XML)的“src”属性必须是字符串,在本例中,它表示作为控件实际源的资源的URL。但是,您可以使用WCF来实现它——在“原始”模式下使用REST端点(http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx)可用于返回PDF文件


您可以按如下方式更改应用程序的结构:ASPX页面中的某些操作使其不直接调用WCF1,而只是将iFrame控件的“src”属性设置为调用WCF1中的REST端点。此调用将获取参数,并调用WCF2检索PDF文件,该调用将直接返回PDF文件(作为流)。这样,您就不会像在缓冲区解决方案中那样产生缓冲成本(如果许多客户端同时请求该页,您可能会遇到一些内存问题,在这种情况下,您也不需要管理缓冲区生存时间)。

如果我理解正确,ASPX页中的某些操作会导致调用(可能传递一些参数)以使第一个服务(WCF1,托管在IIS中),该服务反过来调用第二个服务(WCF2,来自另一台机器);WCF1从WCF2检索PDF,将其保存在inetpub本地并返回保存文件的URL;然后,ASPX页面上的回调调用使用该URL在iFrame上显示PDF

一个简短的回答:您不能使用服务引用来做您需要的事情(ServiceReference1.GetPDF_Byte())-控件(或任何XML)的“src”属性需要是一个字符串,在本例中,该字符串表示作为控件实际源的资源的URL。但是,您可以使用WCF来实现它—在“原始”模式下使用REST端点(http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx)可用于返回PDF文件


您可以按如下方式更改应用程序的结构:ASPX页面中的某些操作会导致它不直接调用WCF1,而只是简单地设置“src”属性调用WCF1中的REST端点。此调用将获取参数,并调用WCF2检索PDF文件,该调用将直接返回PDF文件(作为流)。这样,您就不会产生缓冲解决方案中的缓冲成本(如果许多客户端同时请求页面,您可能会遇到一些内存问题,在这种情况下,您也不需要管理缓冲区的生存时间)。

这样做实际上是从磁盘上移动缓冲区(inetpub)内存。如果您只需要提供1个PDF文件,那么这很好,但是如果您需要使用此全局解决方案提供多个文件,您可能会遇到一些竞争条件(如果两个客户端尝试获取不同的文件,其中一个可能会覆盖另一个)一次只有1个pdf文件,所以这个示例运行得很好。谢谢大家,这是一个巨大的帮助!这样做实际上是将缓冲从磁盘(inetpub)移动到内存。如果您只需要提供1个pdf文件,那么这很好,但是如果您需要使用此全局解决方案提供多个文件,您可能会遇到一些竞争条件(如果两个客户端尝试获取不同的文件,其中一个可能会覆盖另一个)一次只有1个pdf,因此此示例运行良好。感谢各位,这是一个巨大的帮助!
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Response.Clear()
    Response.Buffer = True
    Response.ContentType = "application/pdf"
    Response.BinaryWrite(Globals.PDF_Data.ToArray)

End Sub