我正在使用C#连接到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我尝试过通过浏览器连接,但浏览器只是坐在那里等待请求完成,但它从来没有完成过(很可能是因为服务器上关闭了超时(。如果有任何方法可以查看还有多少请求需要完成(比如百分比下载(,这可能有助于我了解代码是否在做等待之外的其他事情。
即使连接到远程进程,也无法获取远程调用的进度。请尝试在服务器计算机上使用本地Visual Studio(最好是在非生产虚拟机上(,并连接到本地进程,而不是使用远程调试器。
我不确定问题到底是什么,但调试一个速度较慢的应用程序时,我要做的第一步是测试本地连接(本地客户端和本地服务器(,以从等式中消除网络。如果效果良好,请尝试将服务器托管在另一个地方(可能是公共云?(,然后在那里重试,如果效果良好的话,那么服务器上肯定有东西在路上。
如果您对跟踪web服务调用需要多长时间感兴趣,可以通过将开始时间放入HttpContext来跟踪它。现在的项或OperationContext。现在的如果使用WCF,则在Global.asax或MessageInspector中的BeginRequest/EndRequest上的项(可以通过将日期时间返回到Before方法并从After方法中的corelationState参数中读取来发送这两个方法之间的日期时间(。