2011-03-16 111 views
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#

回答

0

我相信,Web客户端将超时默认情况下,1分钟后。
仿真器和设备行为仅仅是平台之间的区别,还是你正在做/以不同方式对事物进行计时。

Yoy可能会考虑原始敬酒通知,让您的应用程序知道有一些新数据要求,因为这不需要从设备进行轮询。

+0

模拟器和设备之间的行为没有区别。我最初使用推送通知,但它非常不稳定,并且使用我无法保证我的解决方案能够正常工作。这就是我转移到这种架构的原因,即客户端将在web服务中调用方法,并且仅当它有数据时才返回。 – user641247 2011-03-16 14:05:15

+0

@ user641247您是否尝试过运行网络跟踪或类似(可能使用Fiddler或WireShark)来寻找差异? – 2011-03-16 17:28:56