C# 在web服务中运行同步方法

C# 在web服务中运行同步方法,c#,wcf,web-services,asynchronous,C#,Wcf,Web Services,Asynchronous,不幸的是,我不在城里,无法测试需要传达给同事的东西,所以我希望能得到一些帮助 当我创建对web服务的服务引用并选中asynchronous复选框时,我注意到即使我的web服务中有所有异步方法,客户端上的代理或元数据也会创建相同方法的同步版本 换句话说,我的web服务上有一个名为GetCategoriesAsync的方法。即使没有为GetCategories编写方法,客户机上的Reference.cs文件(在服务引用中)也会自动生成它。我还能够在WCF服务测试客户端中执行此方法 我的问题是,我是否

不幸的是,我不在城里,无法测试需要传达给同事的东西,所以我希望能得到一些帮助

当我创建对web服务的服务引用并选中asynchronous复选框时,我注意到即使我的web服务中有所有异步方法,客户端上的代理或元数据也会创建相同方法的同步版本

换句话说,我的web服务上有一个名为GetCategoriesAsync的方法。即使没有为GetCategories编写方法,客户机上的Reference.cs文件(在服务引用中)也会自动生成它。我还能够在WCF服务测试客户端中执行此方法


我的问题是,我是否能够选择从我的客户机调用同步或异步方法,并且它将通过intellisense显示?显然,这将假定调用适当的方法时是否使用async、Task和await关键字。

服务器和客户端由网络分隔。两者都不关心另一方如何生成web服务协议指定的字节。它们都无法检测另一个是同步的还是异步的

挑你喜欢的

您可以有同步服务器端实现和异步客户端存根方法。只要让生成器发出异步版本,就可以以异步方式调用任何服务。“它们仍然会通过intellisense显示…?”-是的,您生成的所有内容都会显示,当然。如果需要,就生成它们


TL;DR:如果您想使用异步方法,请生成并使用它们。您不需要修改服务器。如果您不拥有服务器(可能是第三方非.NET服务器),您仍然可以以异步方式调用它。

换句话说,所有I/O本质上都是异步的。客户端代理中的同步方法将阻止异步操作。顺便说一句,即使您的所有web服务方法都是同步的,这也是正确的。Stephen,底线是我可以使用同步或异步方法调用。对的我完全理解使用同步调用时的阻塞。我好奇的是,即使我没有同步方法的物理代码,它们仍然会通过代理中生成的intellisense显示出来。对吗?你说的物理代码是什么意思?如果你指的是服务器端代码,那没关系。您可以有同步服务器端实现和异步客户端存根方法。只要让生成器发出异步版本,就可以以异步方式调用任何服务。“它们仍然会通过intellisense显示…?”-是的,您生成的所有内容都会显示,当然。如果需要,就生成它们。如果这不能回答您的问题,请澄清。但是,如果一个Web服务在服务器端被定义为同步的,它将以所有代价返回一个响应。它取决于客户端是否要显示它。我不是wcf客户端的技术能手,但概念是一样的。相反,若您不接受代码中客户端的响应,那个么您肯定得到了一些错误。@user309009我不知道您到底在说什么。服务器总是返回响应。客户机如何生成它并不重要。从客户的角度来看,这个过程看起来总是一样的。这有什么难懂的?我已经没有办法解释了。