【发布时间】:2016-07-11 19:07:22
【问题描述】:
下面我粘贴了一些代码。在正文的第一行,我调用了一个等待调用 Task<IEnumerable<SkuGcn>> GetSkuGcnList(); 在最后一行,在mapPromise.GetAwaiter() 中,它在获取结果时抛出此异常:
System.Private.CoreLib.ni.dll 中出现“System.IO.FileNotFoundException”类型的异常,但未在用户代码中处理
附加信息:无法加载文件或程序集“System.Runtime.Serialization.Xml,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。系统找不到指定的文件。
我知道GetSkuGcnList() 调用正在调用的服务正在被调用,因为我可以设置一个断点并在调用时中断它。然后服务似乎恢复了。
此代码在 ASP.NET 5 RC1 中运行良好,但现在在 ASP.Net Core 1.0 版本中效果不佳。
任何帮助将不胜感激!
public ProductItemsCacheStore(IItemsProductCacheRepository itemsRepo, IProductAvailabilityPricing proxyGoliathApi,
IProductItemListRepo itemsListsRepo, IItemPricesCacheRepo itemPricesRepo)
{
var mapPromise = proxyGoliathApi.GetSkuGcnList();
_items = itemsRepo.GetAllProductOrderListForCache();
_itemsLists = itemsListsRepo.GetItemListsForCache();
_priceZones = itemPricesRepo.GetAllPriceZonesAndItemPrices();
MergeProductsWithGcn(_items, mapPromise.GetAwaiter().GetResult());
}
我的 project.json 看起来像这样:
{
"version": "1.0.0-alpha.1",
"description": "AvailabilityPricingClient Class Library",
"authors": [ "irving.lennert" ],
"packOptions": {
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": ""
},
"tooling": {
"defaultNamespace": "AvailabilityPricingClient"
},
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.AspNet.WebApi.Client": "5.2.3"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
}
}
GetSkuGcnList()的实现是这样的:
public async Task<IEnumerable<SkuGcn>> GetSkuGcnList()
{
HttpResponseMessage response = _client.GetAsync("/api/skuGcnList").Result;
if (response.IsSuccessStatusCode)
{
var skuGcns = await response.Content.ReadAsAsync<IEnumerable<SkuGcn>>();
return skuGcns;
}
return null;
}
【问题讨论】:
-
mapPromise.GetAwaiter().GetResult()很奇怪。你能不让ProductItemsCacheStore异步或让GetSkuGcnList同步而不返回任务吗?混合同步和异步总是会导致问题 -
我想问题不在于代码,而在于 project.json 配置。来自 project.json 的 nugets 引用和运行时配置可能有助于找到问题的根源。你能和他们一起更新帖子吗?
-
我很难确定我是否使用了正确的 WebApi 客户端程序集,但我没有收到任何参考错误......
-
混合使用异步 (TAP) 和非异步,尤其是在基于 Web 的项目中可能会导致故障排除。强烈建议一路异步或完全不异步。我遇到了类似的问题,并且(不情愿地)遵循@Stephen Cleary 的建议:Asynch All the Way :msdn.microsoft.com/en-us/magazine/jj991977.aspx
-
但这只是重叠的IO,对吧?这样我就可以打电话然后去这里做事然后得到我的结果。这不是我应该做的吗?
标签: c# asp.net asp.net-core .net-core asp.net-core-1.0