Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
C# 通过WCF生成文件,通过ASP.NET下载并进行访问验证_C#_Asp.net_Wcf_Download - Fatal编程技术网

C# 通过WCF生成文件,通过ASP.NET下载并进行访问验证

C# 通过WCF生成文件,通过ASP.NET下载并进行访问验证,c#,asp.net,wcf,download,C#,Asp.net,Wcf,Download,我需要实现一个操作,在这个操作中,用户请求一个需要2-4分钟才能生成的文件。之后,用户需要下载文件,优先通过ASP.NET使用浏览器下载功能。只有指定的用户才能下载此文件 下面是我如何尝试的: 首先,我构建了一个双工wcf服务。用户使用所需的数据调用它,然后它开始生成文件,并通过回调通道通知进度。最后,服务应该向用户发送一个url,即用于下载文件的令牌。这部分很好用 我将文件保存到asp_数据文件夹中的临时文件夹中,以防止直接访问。然后,我创建了一个aspx页面来接收令牌,不管它是什么,根据当前

我需要实现一个操作,在这个操作中,用户请求一个需要2-4分钟才能生成的文件。之后,用户需要下载文件,优先通过ASP.NET使用浏览器下载功能。只有指定的用户才能下载此文件

下面是我如何尝试的:

首先,我构建了一个双工wcf服务。用户使用所需的数据调用它,然后它开始生成文件,并通过回调通道通知进度。最后,服务应该向用户发送一个url,即用于下载文件的令牌。这部分很好用

我将文件保存到asp_数据文件夹中的临时文件夹中,以防止直接访问。然后,我创建了一个aspx页面来接收令牌,不管它是什么,根据当前用户、定义的过期时间对其进行验证,并用文件替换响应

然后事情变得一团糟。我不知道如何通过WCF生成令牌,将其返回到客户端并使用它访问下载页面。我尝试了两种不同的方法,但我想我会放弃这两种方法:

为文件生成guid,在FormsAuthenticationTicket中使用用户信息和过期时间对其进行加密,然后将其发送到客户端。然后,客户端使用票据加密字符串作为下载页面的令牌,下载页面将根据当前用户验证票据中的用户,检查过期时间,提取guid并将文件发送回。问题是生成的加密字符串变得非常大,在url中不可用

为文件生成guid,将其保存在票证中,并在httpcontext会话中包含验证数据和文件路径。然后,wcf服务将guid传递给客户端,客户端使用它访问下载页面。下载页面检查会话,检索票证,提供文件。问题是我在访问WCF操作中的会话时遇到了一些问题。用户请求文件,服务器启动一个线程来生成文件并进行回调调用,因此第一个服务器调用不返回任何内容。成功生成文件后,回调线程将尝试访问会话,保存票据,并在“FinishOperationXXX”回调中将guid返回给用户。但是,我无法访问会话,因为它似乎不再可用于回调线程

我不想使用数据库来做这件事,我试图避免通过WCF本身下载文件,但我需要让它工作起来。我想我会设法做到的,但我想:

我这样做很难吗?
有人知道如何实现类似的东西吗?

为什么需要加密和FormsAuthenticationTicket

它不能很好地用文件类型、用户的用户ID和时间戳文件FielyPePeUsReIDyTimeSt.EXT命名文件,只允许用户下载包含在中间字段中的用户ID的文件?

如果您有多个页面,则每个页面的文件类型都会有所不同


用户的身份验证应该已经由会话处理了,对吗?

好吧,它确实有效。我仍然想知道是否有一个更有条理的解决方案来解决整个问题,但现在这就足够了。对不起,我只是不明白你在用FormsAuthenticationTicket做什么。也许一个关于这一部分的单独问题能让我们对这个问题有更多的了解?您是否需要2种身份验证用户和客户机/服务器会话,用户的其他登录名将无法访问文件?