WCFclient仅操作Async .Net core 2.0

use*_*401 4 asp.net wcf asynchronous .net-core asp.net-core-2.0

我在asp.net core 2.0中将wcf服务端点添加到了连接的服务中,然后尝试使用它,但是对于客户端,只有以..async结尾的功能

我不想使用... async。但是没有.async就没有功能

这有什么问题我该怎么办?

而不是使用

 var response = SystemClient.SearchCountriesAsync(....
Run Code Online (Sandbox Code Playgroud)

我想用那个

 var response = SystemClient.SearchCountries(...
Run Code Online (Sandbox Code Playgroud)

但它给那个错误

错误CS1061'SystemClient'不包含'SearchCountries'的定义,并且找不到扩展方法'SearchCountries'接受类型为'SystemClient'的第一个参数(您是否缺少using指令或程序集引用?)

在此处输入图片说明

Nik*_*kov 8

有一种方法可以在 Visual Studio 2019 中的 .NET 核心项目中生成同步方法。

向您的 .NET 核心项目添加 WCF Web 服务引用的向导Generate Synchronous Operations在第三步“客户端选项”中有一个选项:

在此处输入图片说明

确保选中它,因为默认情况下它是未选中的。


Rob*_*Rob 6

您的客户端没有公开同步方法,但这对您来说应该不是问题。

无需异步调用该方法,只需执行以下操作:

response = SystemClient.SearchAirportsAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "ist").Result;
Run Code Online (Sandbox Code Playgroud)

这将同步调用该方法,因为它将阻止该调用。在此处查看John Skeets的答案。

话虽这么说,我建议您使用提供的异步方法。为了支持这一点,您必须将“动作”签名更改为此:

public async Task<IActionResullt> Index()
{
   SystemClient SystemClient = new SystemClient();
   Credential credential = new Credential();
   credential.UserName = "username";
   credential.UserPassword = "****";

   var response1 = await SystemClient.SearchCountriesAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "TR");
   var response = await SystemClient.SearchAirportsAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "ist");

   //Do whatever you do with those responses

   ViewBag.Language = "ar";
   return View();
}
Run Code Online (Sandbox Code Playgroud)

  • `.GetAwaiter().GetResult()` 更可取,因为它不会将异常包装在 AggregateException 中。但是,这仍然是一种非常昂贵的放纵 - 没有什么可以通过阻塞来简化,但它*确实*在浪费的 CPU、线程以及扩展服务器上的成本更高 (2认同)
  • 我同意,因此答案的另一部分。 (2认同)
  • @ user1688401同步IO容易出现线程池不足的问题-由于IIS最大并行请求限制可能不适用于ASP.NET Core,因此许多线程在`.Result`或类似(或其他API的非异步变体)上阻塞可能会导致不必要的性能瓶颈。在极端情况下,由于线程池不足,它可能导致死锁情况([实际示例](https://github.com/aspnet/IISIntegration/issues/245#issuecomment-253668589)) (2认同)