我有一个webservice正在运行,其中一个方法在调用时不会立即返回。它有数据时返回。一旦它返回,客户端再次调用它,以便在服务有数据时向客户端提供数据。这是为了避免轮询。但问题是,它在模拟器中工作正常,而在设备中虽然webservie没有返回,但客户端最终会在下面的函数中导致null异常。
public string Endgetstatus(System.IAsyncResult result)
{
object[] _args = new object[0];
string _result = ((string)(base.EndInvoke("getstatus", _args, result)));
return _result;
}
这就是我调用异步函数的方法,它在有数据时返回,否则它不会返回。
client.getstatusCompleted += new EventHandler<getstatusCompletedEventArgs>(updatereceived);
client.getstatusAsync();//this returns only when it has data
设备是否在一段时间后终止任何打开的连接并强制客户端调用Endgetstatus函数?我已将超时设置为23小时
BasicHttpBinding binding= new System.ServiceModel.BasicHttpBinding();
TimeSpan interval = new TimeSpan(23, 14, 18);
binding.ReceiveTimeout = interval;
binding.SendTimeout = interval;
一分钟后,客户结束
public string Endgetstatus(System.IAsyncResult result) {
虽然webservice没有返回,但导致参数为null异常。
任何人都可以告诉我在设备上工作应该做些什么,因为它在模拟器上工作正常吗?
请注意这个关于windows phone 7和silverlight c#
答案 0 :(得分:0)
我相信默认情况下,WebClient会在1分钟后超时 模拟器和设备行为之间的区别仅在于平台,还是您正在以不同的方式执行/计时。
Yoy可能想要考虑Raw Toast通知,让您的应用程序知道有一些新数据要求,因为这不需要从设备进行轮询。