У меня запущен веб-сервис, и один из его методов не возвращается сразу при вызове. Возвращается, когда у него есть данные. Как только он возвращается, клиент снова вызывает его, так что клиенту будут предоставляться данные всякий раз, когда у службы есть данные. Это чтобы избежать голосования. Но проблема в том, что он отлично работает в эмуляторе, тогда как в устройстве, хотя web-служба не возвращает, клиент попадает в функцию ниже, перезапуская функцию в нулевом исключении.
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) {
, приводящий к исключению аргумента null, хотя веб-служба не возвращает.
Может кто-нибудь дать мне знать, что я должен сделать, чтобы работать в устройстве, как оно работает на эмуляторе?
Обратите внимание, что это касается Windows Phone 7 и Silverlight C #