C# WebClient UploadStringTaskAsync失败,无异常

C# WebClient UploadStringTaskAsync失败,无异常,c#,async-await,webclient,C#,Async Await,Webclient,我在我编写的RESTfulWebAPI2POST方法上调用UploadStringTaskAsync,它失败了,没有异常。如果我将调用更改为UploadString,它将按预期工作。我尝试了许多不同的方法。UploadStringTaskAsync尝试Fiddler确实显示发布的帖子,但内容长度不匹配(见下文)。我正在测试控制台应用程序中包含的类库中运行此调用。Net 4.5.2目前仅在VS 2015的调试模式下运行。这是我的密码: private async Task PostLoggingI

我在我编写的RESTfulWebAPI2POST方法上调用UploadStringTaskAsync,它失败了,没有异常。如果我将调用更改为UploadString,它将按预期工作。我尝试了许多不同的方法。UploadStringTaskAsync尝试Fiddler确实显示发布的帖子,但内容长度不匹配(见下文)。我正在测试控制台应用程序中包含的类库中运行此调用。Net 4.5.2目前仅在VS 2015的调试模式下运行。这是我的密码:

private async Task PostLoggingItem(SmgLoggingItem loggingItem)
    {
        try
        {
            //using (WebClient client = new WebClient())
            //{
            //WebClient client = new WebClient();

                const string authToken = "mytoken";

                loggingItem.AuthToken = Encryptor.GenerateSecurityToken(authToken);

                client.Encoding = Encoding.UTF8;

                //client.Credentials = CredentialCache.DefaultNetworkCredentials;
                //client.UseDefaultCredentials = true;
                client.Credentials = new NetworkCredential("user","mypwd","mydom");

                // set content type to JSon
                client.Headers.Add("Content-Type", "application/json");

                var jsonItem = JsonConvert.SerializeObject(loggingItem);
            var response = await client.UploadStringTaskAsync(new Uri(ConfigurationManager.AppSettings["WebLogAPI"]), jsonItem);

            //string response = client.UploadString(new Uri(ConfigurationManager.AppSettings["SMGWebLogAPI"]), "POST", jsonItem);

            string result = JsonConvert.DeserializeObject<string>(response);

                if (result != "ok")
                {
                    await SMTPSendEmailAsync.SendEmail("brownp@spectrummg.com", "logging failed WebAPI call",
                        "Error return from WebAPI call in PostLoggingItem");
                }
                return;

            //}
        }
        catch (Exception e)
        {
            await SMTPSendEmailAsync.SendEmail("brownp@spectrummg.com", "logging failed WebAPI call",
                "Exception in PostLoggingItem" + e.Message);
            return;
        }
    }
专用异步任务PostLoggingItem(SmgLoggingItem loggingItem)
{
尝试
{
//使用(WebClient=newWebClient())
//{
//WebClient客户端=新的WebClient();
常量字符串authToken=“mytoken”;
loggingItem.AuthToken=Encryptor.GenerateSecurityToken(AuthToken);
client.Encoding=Encoding.UTF8;
//client.Credentials=CredentialCache.DefaultNetworkCredentials;
//client.UseDefaultCredentials=true;
Credentials=newnetworkcredential(“用户”、“mypwd”、“mydom”);
//将内容类型设置为JSon
client.Headers.Add(“内容类型”、“应用程序/json”);
var jsonim=JsonConvert.SerializeObject(loggingItem);
var response=await client.UploadStringTaskAsync(新Uri(ConfigurationManager.AppSettings[“WebLogAPI”]),jsonItem);
//string response=client.UploadString(新Uri(ConfigurationManager.AppSettings[“SMGWebLogAPI”]),“POST”,jsonItem);
字符串结果=JsonConvert.DeserializeObject(响应);
如果(结果!=“确定”)
{
等待SMTPSendEmailAsync.SendEmail(“brownp@spectrummg.com“,”记录失败的WebAPI调用“,
“PostLoggingItem中WebAPI调用返回错误”);
}
返回;
//}
}
捕获(例外e)
{
等待SMTPSendEmailAsync.SendEmail(“brownp@spectrummg.com“,”记录失败的WebAPI调用“,
“PostLoggingItem中的异常”+e.Message);
返回;
}
}
您可以看到我在哪里注释掉了工作UploadString调用。此外,我还有一个与WebClient对象的“生存期”相关的理论问题,因此在方法中创建WebClient对象(请参见注释使用),但现在使用方法PostLoggingItem所属的对象实例化创建WebClient对象

这是小提琴手:


我当然想知道为什么异步不起作用。此外,我还使用了aync方法,一直在等待调用树的更新,但没有结果。

我发现了问题所在。我在一个简单的控制台应用程序中测试这个方法,这个应用程序甚至在创建web调用之前就已经退出了!