Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Silverlight 如何在客户端知道HTTP处理程序何时完成处理?_Silverlight_Webclient_Ashx - Fatal编程技术网

Silverlight 如何在客户端知道HTTP处理程序何时完成处理?

Silverlight 如何在客户端知道HTTP处理程序何时完成处理?,silverlight,webclient,ashx,Silverlight,Webclient,Ashx,对于一个简单的解决方案来说,这可能是一个很长的问题,但接下来 我有一个定制的silverlight控件,用于选择多个文件并将它们发送到服务器。它使用WebCLient控件的OpenWriteAsync方法将文件发送到常规处理程序(fileReceiver.ashx) 基本上,silverlight代码对每个文件都执行类似的操作: WebClient client = new WebClient(); client.OpenWriteCompleted += (sender, e) =>

对于一个简单的解决方案来说,这可能是一个很长的问题,但接下来

我有一个定制的silverlight控件,用于选择多个文件并将它们发送到服务器。它使用WebCLient控件的OpenWriteAsync方法将文件发送到常规处理程序(fileReceiver.ashx)

基本上,silverlight代码对每个文件都执行类似的操作:

WebClient client = new WebClient();
client.OpenWriteCompleted += (sender, e) =>
  {
    PushData(data, e.Result);
    e.Result.Close();
    data.Close();
  };
client.OpenWriteAsync(handlerUri); 
服务器端处理程序只是读取传入流,然后对生成的字节数组进行更多处理


问题是客户端OpenWriteCompleted是在所有数据通过线路发送后立即完成的。然后,我的代码将与下一个文件保持一致。我真正想要的是等待ASHX处理程序完成对该请求的所有处理。我该怎么做?WebClient上有任何等待机制吗?我可以在处理程序中的HttpContext上执行任何回调吗?我应该使用其他类型的转移技术吗?请指教

Hrm,也许一个简单的解决方案是用GUID标记url(每个文件或传输的GUID都是唯一的,无论您的情况如何)。然后,您可以使用另一个简单的web服务,该服务能够基于guid检查其他服务的状态,并让您的silverlight客户端查询该新服务的处理状态(通过将新web服务传递给过去传输的guid)。

Hrm,可能一个简单的解决方案是使用guid标记url(每个文件或传输的guid都是唯一的,无论对您的情况有什么意义)。然后,您可以拥有另一个简单的web服务,该服务能够基于guid检查其他服务的状态,并让您的silverlight客户端查询该新服务的处理状态(通过向新web服务传递过去传输的guid).

我假设您担心从处理程序返回的数据需要很长时间才能传输,并且在此期间服务器没有被使用。没有办法知道服务器何时完成处理,因此我认为如果不更改体系结构,您无法做到这一点


我希望您的处理程序只有某种标识符(如GUID或int)可用于在另一个请求中检索处理程序的结果。因此,页面将调用处理程序,处理程序将存储结果并返回标识符,页面将在第二次调用处理程序并调用另一个处理程序以获取第一次调用的结果。这将在传输数据时保持服务器的使用ng.

我假设您担心从处理程序返回的数据需要很长时间才能传输,并且在此期间服务器没有被使用。没有办法知道服务器何时完成处理,因此我认为如果不更改体系结构,您无法做到这一点


我希望您的处理程序只有某种标识符(如GUID或int)可用于在另一个请求中检索处理程序的结果。因此,页面将调用处理程序,处理程序将存储结果并返回标识符,页面将在第二次调用处理程序并调用另一个处理程序以获取第一次调用的结果。这将在传输数据时保持服务器的使用ng.

或者您可以使用JavaScript(jQuery)…如果您不介意使用JavaScript,也可以使用JavaScript(jQuery)…如果您不介意使用JavaScript,也就是说。

如果文件不是很大,并且可以将每个文件都保存在内存中,那么一个丑陋但有效的解决方案就是将它们转换为字符串,并使用UploadStringAsync方法发送它们


如果文件大小是无界的,请避免使用这种方法,但如果现在可以避免,因为它们将相对较小,则可以使用这种方法。

如果文件不是很大,并且可以将每个文件都保存在内存中,则一种丑陋但有效的解决方案是将它们转换为字符串,并使用UploadStringAsync方法发送它们


如果文件大小是无界的,请避免使用这种方法,但如果现在可以,因为它们将相对较小,则可以使用这种方法。

Silverlight也提出了同样的问题。Microsoft认可的答案是,使用WebClient和OpenWriteAsync无法做到这一点。您需要用户上传StringAsync或HttpWebRequest.

Silverlight也提出了同样的问题。微软认可的答案是,WebClient和OpenWriteAsync无法做到这一点。你需要用户上传StringAsync或HttpWebRequest。

类似的方法可能会奏效——但我希望有另一种方法,某种内置的东西,不涉及单独的服务诸如此类的东西可能会奏效,但我希望有另一种方法,某种内置的东西,不涉及像那样的单独服务。我担心服务器端处理会占用大量资源,所以我不想在知道文件号1之前发送文件号2,如果完全处理(不仅收到)通过服务器。然而,你的答案与mattlant的基本相同,所以我想这是我必须走的路。我担心服务器端处理需要大量资源,所以我不想在我知道文件号1之前发送文件号2,如果完全处理(不仅收到)你的答案基本上和mattlant的一样,所以我想这是我必须要做的。