WCFclient只能运行Async .Net core 2.0

时间:2017-11-13 07:43:26

标签: asp.net wcf asynchronous .net-core asp.net-core-2.0

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

我不想使用... async.But没有.async没有功能

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

而不是使用

 var response = SystemClient.SearchCountriesAsync(....

我想用那个

 var response = SystemClient.SearchCountries(...

但它给出了错误

错误CS1061' SystemClient'不包含' SearchCountries'的定义没有扩展方法' SearchCountries'接受类型' SystemClient'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

enter image description here

2 个答案:

答案 0 :(得分:5)

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

不是异步调用方法,而是执行此操作:

response = SystemClient.SearchAirportsAsync(credentials, SystemHelperLanguageTypes.English, SystemHelperSearchTypes.CodeSearch, "ist").Result;

这会同步调用该方法,因为它会阻止调用。检查John Skeets回答here

话虽如此,我建议您使用提供的异步方法。为了支持您,您必须将Action签名更改为:

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();
}

答案 1 :(得分:4)

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

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

enter image description here

确保将其选中,因为默认情况下未选中它。