调试长时间运行的Web服务调用

时间:2018-12-07 18:06:36

标签: c# .net web-services debugging

我正在使用C#连接到Web服务以获取数据。但是,我目前在使代码在远程服务器上运行方面遇到问题。当我说问题时,我的意思是它正在运行,但是客户端和服务器之间的连接速度非常低(由于我的没有错-客户端正在通过Web服务提供缓慢的结果集,并且所有超时都按顺序关闭了)这样做。)

 if ((endpointConfiguration == EndpointConfiguration.SFFService))
            {
                System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
                result.MaxBufferSize = int.MaxValue;
                result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
                result.MaxReceivedMessageSize = int.MaxValue;
                result.AllowCookies = true;
                result.OpenTimeout = TimeSpan.MaxValue;
                result.CloseTimeout = TimeSpan.MaxValue;
                result.SendTimeout = TimeSpan.MaxValue;
                return result;
            }

所以。这不是一个好的开始。打开关闭,并将所有设置发送到最大。

无论如何,我已经解决了他们的长时间超时问题,并且一些较小的Web服务请求完成并在服务器上成功完成。但是,最大,最慢的一个会无限期地挂起,这可能是因为我已告诉​​它永不超时。

但是,我很确定还会发生其他问题,因为我将其放置一整夜而已就坐在那里。在本地,在我的开发机器上,尽管速度很慢,但是可以工作。

我的问题是,是否有人在检查可能在这里发挥作用的环境方面有其他想法?我以为可能是防火墙,但是考虑到小请求成功(并连接),调试缓慢的请求非常困难,因为我不知道要等多久才能接受该程序不会做任何事情。

FWIW,我尝试通过浏览器进行连接,再次,浏览器只是坐在那里等待请求完成,但从未完成(很可能是由于服务器关闭了超时)。如果有什么方法可以查看甚至剩下多少请求要完成(例如下载百分比),这可能会帮助我提供一些有关代码是否正在执行除等待之外的指导。

1 个答案:

答案 0 :(得分:0)

即使您已连接到远程进程,也无法获得远程呼叫的进度。尝试在服务器计算机上(最好是在非生产VM上)使用本地Visual Studio并附加到本地进程,而不要使用远程调试器。

我不确定问题到底是什么,但是在调试速度较慢的应用程序时,我要采取的第一步是测试本地连接(本地客户端和本地服务器),以从等式中消除网络。如果效果良好,请尝试将服务器托管在其他地方(也许是公共云?),然后再尝试一次。如果效果良好,则说明在途中或该服务器上肯定有东西。

如果您有兴趣跟踪Web服务的调用时间,可以通过将开始时间放入Global.asax或MessageInspector中BeginRequest / EndRequest上的HttpContext.Current.Items或OperationContext.Current.Items中来进行跟踪如果使用WCF(可以通过将两种方法之间的日期时间返回到Before方法中并在After方法中的corelationState参数中读取它来发送日期时间)。