Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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# 与web服务相关的同步与异步_C#_Asp.net_Web Services_Asynchronous - Fatal编程技术网

C# 与web服务相关的同步与异步

C# 与web服务相关的同步与异步,c#,asp.net,web-services,asynchronous,C#,Asp.net,Web Services,Asynchronous,我试图找到一个很好的解释,来解释互联网上web服务的同步通信和异步通信之间的区别。但是,似乎连愿意为这个问题提供答案的人也对它感到困惑。一个答案是完整的,反之亦然 如果有人能清楚地解释上述问题的不同之处,这将对将来面临相同问题的每个人都有帮助。你对自己的问题不是很具体,但这可能会有帮助: 在最基本的层面上,同步通信是指与服务器的通信在发送其他资产请求的同时进行。例如,如果是同步的,ajax调用将阻止其他资产下载 异步通信是指与web服务/页面中的其他资产无关的通信。这种通信使用得更频繁。异步服务

我试图找到一个很好的解释,来解释互联网上web服务的同步通信和异步通信之间的区别。但是,似乎连愿意为这个问题提供答案的人也对它感到困惑。一个答案是完整的,反之亦然


如果有人能清楚地解释上述问题的不同之处,这将对将来面临相同问题的每个人都有帮助。

你对自己的问题不是很具体,但这可能会有帮助: 在最基本的层面上,同步通信是指与服务器的通信在发送其他资产请求的同时进行。例如,如果是同步的,ajax调用将阻止其他资产下载


异步通信是指与web服务/页面中的其他资产无关的通信。这种通信使用得更频繁。

异步服务

假设您有一个长期运行的web服务(假设它从文件系统读取一个大文件并进行一些处理)

如果将其设置为“同步”web服务(使用该服务的WCF定义),则调用客户端将不得不等待处理完成,并且通常在处理完成时会阻塞其中一个asp.net工作线程。对于具有高流量的服务,这可能会成为问题

如果将其设置为异步web服务,那么您要说的是,您的代码将把一些长时间运行的处理委托给另一个线程,或者使用非阻塞机制,并且这将在将来的某个时候返回(若您使用的是c#5.0,那个么您可能需要查看async和await关键字的示例)

例如,可以使用异步ReadFile方法之一读取大文件

这将不会阻止其中一个asp.net工作线程,从而允许潜在的更大吞吐量

(当人们提到同时调用同一个服务(通常是通过网页上的AJAX)时,通常会有一些混淆)-虽然页面中的调用通常使用javascript中的异步机制进行,但这与上面描述的并不完全相同-我喜欢在脑海中区分多个并行调用和异步调用)

异步调用

还值得注意的是,即使服务未设置为“异步”,您也可以对该服务进行异步调用

var jqxhr = $.ajax( "AnyService.svc" )
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });

alert("Called");
对于本例,您希望看到在“成功”之前显示“Called”,因为这不会等待服务返回后再继续。您正在调用的服务不必是“asynchronous”

编辑


正如评论中指出的,您还可以让客户端以同步方式调用“异步”服务(即,该服务不会阻止工作线程进行进一步请求,但客户端将在该端进行阻止)。

首先让我们澄清您对同步和异步的疑问

同步通信是通信者时间同步的直接通信。这意味着通信中涉及的所有各方同时在场。这包括但不限于电话交谈(不包括短信),公司董事会会议,聊天室活动和即时消息

异步通信不要求参与通信的各方同时在场。例如电子邮件、讨论板、博客和手机短信。在远程(特别是在线)教育中,异步通信是主要的(有时是唯一的)沟通方法。通常,我们在每节课上使用不同的讨论板,每个讨论板都有自己的目的

e、 g。 同步

当我给你打电话时,我拨你的号码,等你接电话。然后你说些什么,同时我听你说。当你结束时,我向你发送数据(与你交谈),你在同一时刻收到数据(听我说)。在我们的通信结束时,我们中的一个人说“传输结束”(再见)另一个说“再见”,然后两人都挂断了电话

异步

我给你写了一封信。我把信放在邮局,然后会寄给你。我没有等待。我做了很多其他的事情。然后你收到了信。你读了信,而我还做了很多其他的事情。然后你给我写了一封回信,然后寄给我。在所有这些事情上,我都没有参与。第二天,我得到了一封信来自系统(邮递员)的(同步)信息(信号)。它(他)说:“这是给你的信息”。或者,我可以每五分钟轮询一次我的收件箱,检查是否有新的信件。然后我暂停其他工作,收到你的信并阅读你的答案。然后我根据这个答案做一些事情。但这些事情你不会注意到,因为你没有参与我对你的异步答案所做的事情


礼貌:

同步-您正在给朋友打电话,他接了电话并回复了您。
异步-您已通过朋友的手机向其发送了一条短信,但您的朋友可能会立即回复,也可能会在10分钟后或2天后回复。这种情况下,您不希望朋友立即回复。

问题是“同步Vs异步”在这种情况下不够具体。请举例说明,告诉我们您打算做什么,以及您希望它做什么,并让我们知道您在实现这一点上遇到了什么困难。电话示例不适用于