Tag: 超时

网络电话永远不会超时

我有许多使用各种Web技术的应用程序,例如SOAP,WCF服务或简单的XmlReader。 然而,如果互联网连接在错误的时间遇到​​问题,它们似乎都会遇到错过超时和无限悬挂的问题。 我已经将所有场景中的超时设置为小的,例如对于wcf closeTimeout=”00:00:15″ openTimeout=”00:00:15″ receiveTimeout=”00:00:15″ sendTimeout=”00:00:15″ 或肥皂 _Session.Timeout = (int)TIMEOUT.TotalMilliseconds; 这些超时通常会被击中,但是看起来有一些特殊情况,如果互联网在正确的时间退出,呼叫将挂起并且永远不会超时(使用同步呼叫)。 我正在考虑每次拨打电话时启动一个计时器,并在计时器到期时使用相应的.Abort()函数取消呼叫。 但是,我想知道是否有更简单的方法来解决问题并确保超时被击中。 有谁知道为什么会发生这种情况,如果是这样,干净/简单/好的方法是什么,以确保呼叫总是超时?

套接字ReceiveTimeout

我已将ReceiveTimout指定为40 ms。 但是接收超时需要500ms以上。 我正在使用秒表来计算时间戳。 代码如下所示。 Socket TCPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); TCPSocket.ReceiveTimeout = 40; try { TCPSocket.Receive(Buffer); } catch(SocketException e) { }

C#MongoDB驱动程序忽略超时选项

我们正在使用Mongo DB的C#驱动程序(1.9.1)。 如果DB不可访问,我们有一些需要运行的回退逻辑,但是默认超时太长。 我们试图改变它,但我们放置的值被忽略了。 对于测试,我们使用的是无响应机器的IP。 我们尝试在连接字符串中设置超时: 或者通过代码: var client = new MongoClient(new MongoClientSettings { Server = new MongoServerAddress(“xxx.xxx.xxx.xxx”), SocketTimeout = new TimeSpan(0, 0, 0, 2), WaitQueueTimeout = new TimeSpan(0, 0, 0, 2), ConnectTimeout = new TimeSpan(0, 0, 0, 2) }); 两次请求在平均约20秒后超时。 我们设置超时选项的方式可能有什么问题。

在TcpClient BeginConnect之后,应用程序在退出时挂起20秒

我有TcpClient.BeginConnect()和TcpClient.EndConnect()方法的奇怪行为的问题。 我使用BeginConnect()为Connect()方法添加超时(请参阅下面的扩展方法代码)。 如果我连接,我调用EndConnect()并且一切正常,但是如果我超时我不能调用EndConnect(),因为它会阻塞大约20秒,所以我只是调用这个非阻塞代码: result.AsyncWaitHandle.Close(); result.AsyncWaitHandle.Dispose(); client.Close(); 问题是当我在超时后关闭表单(在运行代码之后)我的应用程序将“挂起”大约20秒。 有什么方法可以阻止这种悬挂吗? 这只是在应用程序退出时很不愉快,所以,如果没有其他可能的话,它可能是一些肮脏的杀戮;] 一些说明: 只有在我无法连接到服务器时才会挂起。 退出时,表单将关闭,只有一些进程仍在后台运行。 如果我按下VS2013中的暂停按钮,应用程序挂起,我没有接受任何代码,所以我想这是一些自动创建的线程,其中挂起代码(EndConnect()?)被调用。 当我在超时后等待大约20秒(应用程序响应)然后我关闭表单时没有挂起 – 所以这个阻塞代码(EndConnect()?)会自动从其他一些线程调用。 如果我调用方法TcpClient.Connect()(没有超时)我被阻止大约20秒,但退出时没有挂起。 如果我在超时时运行此非阻塞代码: client.Client.Close(); client.Client.Dispose(); client.Close(); 它仍会在退出时挂起。 即使我将BeginConnect(ip,port,null,null)更改为BeginConnect(ip,port,new AsyncCallback(ConnectCallback),null)并在ConnectCallback中调用客户端上的EndConnect()和Close(),应用程序仍会挂起(ConnectCallback)在退出之前被调用并且其代码没有挂起)。 我写了大约20秒,但它更像是(20 – 超时)秒。 在我的代码II中有超时= 1秒,所以在这种情况下应用程序挂起大约20秒。 以下是我的连接代码: public bool Connect(string localMachineName) { // Get ips for local machine IPAddress[] ips; try { ips = Dns.GetHostEntry(localMachineName).AddressList.Where( o => o.AddressFamily == AddressFamily.InterNetwork).ToArray(); } catch […]

如何在WebClient.DownloadFileAsync上实现超时

所以我认为Webclient.DownloadFileAysnc会有一个默认超时,但环顾文档我无法在任何地方找到任何关于它的东西所以我猜它没有。 我试图从互联网上下载文件,如下所示: using (WebClient wc = new WebClient()) { wc.DownloadProgressChanged += ((sender, args) => { IndividualProgress = args.ProgressPercentage; }); wc.DownloadFileCompleted += ((sender, args) => { if (args.Error == null) { if (!args.Cancelled) { File.Move(filePath, Path.ChangeExtension(filePath, “.jpg”)); } mr.Set(); } else { ex = args.Error; mr.Set(); } }); wc.DownloadFileAsync(new Uri(“MyInternetFile”, filePath); mr.WaitOne(); if (ex != null) […]

Web请求超时处理?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = 20000; using (WebResponse response = request.GetResponse()) using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream)) { var result = reader.ReadToEnd(); // Do something with result } 在上面的例子中我定义了一个超时,如果碰巧超时,我怎么知道,结果是空的? 我收到任何响应类型吗? 我怎样才能确保我超时?

等到进程不再运行或直到超时,以先发生者为准

我想使用taskkill杀死在机器上运行的进程,如果它们在X秒后仍在运行(Windows服务已停止,但进程耗尽需要时间)在C#(.net)中完成上述操作的最正确方法是什么2.0或可能3.0)? 我给出了进程名称(使用Process.GetProcesses() )来validation进程是否仍在运行的实用程序方法。 (由于我的代码没有生成过程,我无法使用WaitTillExit知道它何时不再运行) PS:该进程在远程计算机上运行

在c#中检查网络驱动器是否存在超时

我创建了一个Windows服务,在服务器的硬盘驱动器(安装服务的位置)之间移动文件到服务器中映射的网络驱动器。 我在创建解决方案时遇到的一个问题是网络问题。 如何在检查时设置超时时检查网络驱动器是否存在? 如果它超时,我捕获exception并在X分钟内重试并将项目留在队列中。 谢谢!

查询在NHibernate中出现超时错误,但在SQL Server中没有

我在C#中遇到了NHibernate的问题。 当它想要执行查询时,应用程序面临ADO超时错误,但是当我使用SQL事件探查器捕获查询,然后我在SQL Server的新查询中运行它时,它只需要2秒 有任何想法吗??

限制C#中的方法

我有一个Game框架,其中有一个实现IBotInterface的Bots列表。 这些机器人是由用户定制的,唯一的限制是它们必须实现接口。 然后游戏调用机器人中的方法(希望并行),用于各种事件,如yourTurn和roundStart。 我希望机器人在被迫退出计算之前只花费有限的时间来处理这些事件。 我正在尝试的一种例子是:(其中NewGame是代表) Parallel.ForEach(Bots, delegate(IBot bot) { NewGame del = bot.NewGame; IAsyncResult r = del.BeginInvoke(Info, null, null); WaitHandle h = r.AsyncWaitHandle; h.WaitOne(RoundLimit); if (!r.IsCompleted) { del.EndInvoke(r); } } ); 在这种情况下,我被迫运行可能不会终止的EndInvoke()。 我想不出一种干净地中止线程的方法。 如果有某种forms的话会很棒 try { bot.NewGame(Info); } catch (TimeOutException) { // Tell bot off. } finally { // Compute things. } 但我不认为有可能制作这样的结构。 这样做的目的是优雅地处理具有意外无限循环或需要很长时间计算的AI。 解决这个问题的另一种可能方法是使用类似的东西(使用更多的c#和更少的伪代码) […]