我正在使用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,我尝试通过浏览器进行连接,再次,浏览器只是坐在那里等待请求完成,但从未完成(很可能是由于服务器关闭了超时)。如果有什么方法可以查看甚至剩下多少请求要完成(例如下载百分比),这可能会帮助我提供一些有关代码是否正在执行除等待之外的指导。
答案 0 :(得分:0)
即使您已连接到远程进程,也无法获得远程呼叫的进度。尝试在服务器计算机上(最好是在非生产VM上)使用本地Visual Studio并附加到本地进程,而不要使用远程调试器。
我不确定问题到底是什么,但是在调试速度较慢的应用程序时,我要采取的第一步是测试本地连接(本地客户端和本地服务器),以从等式中消除网络。如果效果良好,请尝试将服务器托管在其他地方(也许是公共云?),然后再尝试一次。如果效果良好,则说明在途中或该服务器上肯定有东西。
如果您有兴趣跟踪Web服务的调用时间,可以通过将开始时间放入Global.asax或MessageInspector中BeginRequest / EndRequest上的HttpContext.Current.Items或OperationContext.Current.Items中来进行跟踪如果使用WCF(可以通过将两种方法之间的日期时间返回到Before方法中并在After方法中的corelationState参数中读取它来发送日期时间)。