0
我有一个web服务正在运行,其中一个方法调用时不会立即返回。它有数据时返回。一旦它返回,客户端再次调用它,这样,只要服务有数据,客户端就会获得数据。这是为了避免轮询。但问题是,它在仿真器中工作正常,而在设备中虽然webservie不返回,但客户端在下面的函数中以null异常结束。webservice异步调用
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函数?我有一个分钟后,客户端在
public string Endgetstatus(System.IAsyncResult result) {
最终导致参数无效例外虽然web服务不会返回超时设置23小时
BasicHttpBinding binding= new System.ServiceModel.BasicHttpBinding();
TimeSpan interval = new TimeSpan(23, 14, 18);
binding.ReceiveTimeout = interval;
binding.SendTimeout = interval;
。
任何人都可以让我知道我应该怎么做在设备上工作,因为它可以在模拟器上正常工作吗?
请注意,这对Windows Phone 7的和Silverlight C#
模拟器和设备之间的行为没有区别。我最初使用推送通知,但它非常不稳定,并且使用我无法保证我的解决方案能够正常工作。这就是我转移到这种架构的原因,即客户端将在web服务中调用方法,并且仅当它有数据时才返回。 – user641247 2011-03-16 14:05:15
@ user641247您是否尝试过运行网络跟踪或类似(可能使用Fiddler或WireShark)来寻找差异? – 2011-03-16 17:28:56