我有一个小的.Net 4.5 C#应用程序,它从数据源读取信息,然后将这些信息推送到一个.NET 4.5 Web API站点,该站点具有一个简单的控制器。控制器接收数据并将其放入数据库中。
对于我来说,以下内容是有效的,只要应用程序能够读取,它就可以写入,所有内容最终都会进入数据库中:
以下代码无法正常运行。它会POST大约一千条记录,然后出现多个错误,带有“任务已取消”的消息,但是大约10秒后会恢复处理:
完整的错误信息如下:
有没有快速的解决方案? 据我所知,它会耗尽某些资源,如线程、套接字等,谁知道呢 :-)
如果您有任何建议,将不胜感激。我很想让这个程序正常工作,因为如您所想象的那样,同步进行POST比异步要慢得多。
为了确保这不是我的机器、本地防病毒软件或网络的问题,我在W2k8 R2服务器、Windows 7虚拟桌面(新版本)和Windows 8机器上进行了测试,结果相同。
更多信息: 我已经使用局域网连接测试过较小数据集(10,000条记录),DefaultConnectionLimit为100,取得了部分成功。但是,在生产环境中(500,000条记录),当向跨互联网远程服务器发送请求时(延迟仍然低,25ms-50ms),我并没有取得任何成功。
提前感谢您的任何帮助 :-)
对于我来说,以下内容是有效的,只要应用程序能够读取,它就可以写入,所有内容最终都会进入数据库中:
public static void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = client.PostAsJsonAsync("/api/Station/Collector", tData).Result;
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
以下代码无法正常运行。它会POST大约一千条记录,然后出现多个错误,带有“任务已取消”的消息,但是大约10秒后会恢复处理:
public static async void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = await client.PostAsJsonAsync("/api/Station/Collector", tData);
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
完整的错误信息如下:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at IICE_DataCollector_Remote.Program.<PostDataToWebApi>d__7.MoveNext() in e:\Users\TestUser.TEST\Documents\Visual Studio 2012\Projects\Test_App-trunk\TestCollector\Program.cs:line 475
有没有快速的解决方案? 据我所知,它会耗尽某些资源,如线程、套接字等,谁知道呢 :-)
如果您有任何建议,将不胜感激。我很想让这个程序正常工作,因为如您所想象的那样,同步进行POST比异步要慢得多。
为了确保这不是我的机器、本地防病毒软件或网络的问题,我在W2k8 R2服务器、Windows 7虚拟桌面(新版本)和Windows 8机器上进行了测试,结果相同。
更多信息: 我已经使用局域网连接测试过较小数据集(10,000条记录),DefaultConnectionLimit为100,取得了部分成功。但是,在生产环境中(500,000条记录),当向跨互联网远程服务器发送请求时(延迟仍然低,25ms-50ms),我并没有取得任何成功。
提前感谢您的任何帮助 :-)
await
吗?看起来它甚至不能编译... - Jon SkeetSemaphoreSlim
来限制您的请求。 - Stephen Cleary