我最近在我的应用程序中添加了一些代码以使用webAPI。这是通过HttpClient完成的。在我的开发机器上,一切正常。但是,一旦我(直接或通过构建过程)发布到Azure WebApp,一旦部署了应用程序,我就会遇到运行时错误。
异常指向第246行。等效于此方法;
public IList<SubscriberDefinition> GetAllSubscribers()
{
IList<SubscriberDefinition> allSubscribers = Caching.Get<IList<SubscriberDefinition>>(CacheKeys.ListAllSubscribers);
if (allSubscribers != null && allSubscribers.Count > 0)
return allSubscribers;
try
{
SetBearerToken(HttpClient);
HttpResponseMessage response = HttpClient.GetAsync("api/getallsubscribers").Result;
if (response.IsSuccessStatusCode)
{
allSubscribers = response.Content.ReadAsAsync<IList<SubscriberDefinition>>().Result;
Caching.Add(CacheKeys.ListAllSubscribers, allSubscribers, ECacheDuration.TwentyFourHours);
return allSubscribers;
}
}
catch
{
return new List<SubscriberDefinition>();
}
return new List<SubscriberDefinition>();
}
关于这个问题,我已经两天了。但是我不知道它是什么。。这段代码的设置类似于我在应用程序中使用的另一个API。那里工作正常。因此它必须是我在此特定类中使用的引用。希望有人可以在这里帮助我,或向正确的方向推动我。
答案 0 :(得分:0)
经过长时间的搜索,我发现问题是由我使用异步方式引起的。非常感谢@JohnRasch将我推向正确的方向!
我怀疑在许多引用的NuGet和MyGet软件包之一中,发生了更新,导致发生此错误。我更新了响应的处理方式,并将其转换为所需的类型。这就解决了问题。尽管我仍然不完全了解此问题的根本原因是什么,但我至少知道如何正确解决它。
对于此特定服务/ API调用,我可以使用以下代码进行操作;
public IList<SubscriberDefinition> GetAllSubscribers()
{
IList<SubscriberDefinition> allSubscribers = Caching.Get<IList<SubscriberDefinition>>(CacheKeys.ListAllSubscribers);
if (allSubscribers != null && allSubscribers.Count > 0)
return allSubscribers;
try
{
SetBearerToken(HttpClient);
HttpResponseMessage response = Task.Run(async () => await HttpClient.GetAsync("api/getallsubscribers")).Result;
if (response.IsSuccessStatusCode)
{
var jsonstring = response.Content.ReadAsStringAsync();
jsonstring.Wait();
allSubscribers = JsonConvert.DeserializeObject<IList<SubscriberDefinition>>(jsonstring.Result);
Caching.Add(CacheKeys.ListAllSubscribers, allSubscribers, ECacheDuration.TwentyFourHours);
return allSubscribers;
}
}
catch
{
return new List<SubscriberDefinition>();
}
return new List<SubscriberDefinition>();
}
在另一项服务中,我们也遇到了此错误,我们可以通过全程异步来解决它。