C# 使用WebClient对负载平衡Wcf Rest Api的Post调用有时会出现异常

C# 使用WebClient对负载平衡Wcf Rest Api的Post调用有时会出现异常,c#,asp.net,.net,load-balancing,wcf-rest,C#,Asp.net,.net,Load Balancing,Wcf Rest,Web应用程序调用内部WCF REST api。应用程序可以成功调用开发人员和生产人员的服务。但有时用户会因为异常而无法使用。应用程序从桌面、ipad和其他设备运行。它使用WebClient调用服务。我试图从dev复制错误,但无法复制。例外情况如下: try{ var vm = new { lots of fields data }; using (var client = new WebClient()) { var dataString = JsonConvert.Serialize

Web应用程序调用内部WCF REST api。应用程序可以成功调用开发人员和生产人员的服务。但有时用户会因为异常而无法使用。应用程序从桌面、ipad和其他设备运行。它使用WebClient调用服务。我试图从dev复制错误,但无法复制。例外情况如下:

try{
var vm = new { lots of fields data };

using (var client = new WebClient())
{
   var dataString = JsonConvert.SerializeObject(vm);
   client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
   client.UploadString(new Uri("http://myservicename/postjsondata"), 
   "POST", dataString);
 }
}
catch(Exception ex)
{
  //write to log file.
}
System.Net.WebException:基础连接已关闭:出现错误 接收时发生意外错误。-->System.IO.IOException: 无法从传输连接读取数据:现有 远程主机已强制关闭连接。--> System.Net.Sockets.SocketException:已创建现有连接 被远程主机强制关闭

位于System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32 偏移量,Int32大小)

---内部异常堆栈跟踪的结束---

位于System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32 偏移量,Int32大小)

在System.Net.PooledStream.Read(字节[]缓冲区,Int32偏移量,Int32 尺寸)

在System.Net.Connection.SyncRead(HttpWebRequest请求,布尔值 userRetrievedStream,布尔probeRead)

---内部异常堆栈跟踪的结束---

在System.Net.WebClient.UploadDataInternal(Uri地址,字符串 方法,字节[]数据,WebRequest和request)

在System.Net.WebClient.UploadString(Uri地址、字符串方法、, (字符串数据)

生产环境是Windows server 2012和负载平衡。我无法重现错误,但它是突然发生的,用户无法解释异常引发的流程。因此,我无法找到缩小问题范围的模式。我正在浏览代码,猜测错误并修改逻辑。我在谷歌上搜索了很多,但没有找到任何线索

我调用Rest Api的方式如下:

try{
var vm = new { lots of fields data };

using (var client = new WebClient())
{
   var dataString = JsonConvert.SerializeObject(vm);
   client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
   client.UploadString(new Uri("http://myservicename/postjsondata"), 
   "POST", dataString);
 }
}
catch(Exception ex)
{
  //write to log file.
}

我无法重现这个错误。有没有办法在生产中重现此错误?

负载平衡是不同的……在调用过程中,(客户端调用的)状态可能会从一台负载平衡的机器跳到下一台。感谢您的回复。不幸的是,我不清楚这个解释。请您详细说明一下。卸下负载平衡器,我敢打赌问题会消失。AFAIK的问题在于负载平衡器及其反应。根据处理请求的数量,一台服务器是不够的。无法移除负载banancer,因为这是公司的结构。基于这种结构,我必须找到一个解决方案。我曾经做过一项工作,在那里我们遇到了负载平衡服务的问题。我不认为这是你的处境。但我们必须发现,在客户端会话期间在服务器之间切换时,客户端失败的原因。我希望我能提供更多的见解-(负载平衡是不同的…关于(客户端调用的)状态的一些东西)可能在呼叫过程中从一台负载平衡的机器跳到下一台。感谢您的回复。不幸的是,我不清楚解释。请您详细说明一下。卸下负载平衡器,我打赌问题会消失。问题在于您的负载平衡器及其反应。基于umb的一台服务器是不够的请求处理的er。无法删除load banancer,因为这是公司的结构。基于此结构,我必须找到解决方案。我曾在一项工作中遇到负载平衡服务的问题。我不认为这是您的情况。但我们必须发现为什么在客户端se期间在服务器之间切换时客户端出现故障我希望我能提供更多的见解-(