ExecutionEngineException при вызове веб-службы HttpDuplexBinding
Я боролся с веб-сервисом, который генерирует исключение ExecutionEngineException за прошедший день. Наконец-то я понял, что клиент Silverlight не любит IEnumerable<>, IList<> и List<> в качестве возвращаемого типа. MyObject[] в порядке, хотя.
Мне удалось воспроизвести его в примере решения:
Описание услуг:
[ServiceContract]
public interface IService
{
[OperationContract]
IEnumerable<Person> SomeStuff();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service : IService
{
public IEnumerable<Person> SomeStuff()
{
return new Person[] { new Person { Name = "some person", ID = 42 } };
}
}
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int ID { get; set; }
}
На стороне клиента просто создайте ссылку на службу и позвоните в службу. Исключение выдается после возврата сервиса.
Любая идея о том, что является причиной проблемы, будет оценена.
1 ответ
Официального ответа у меня нет, но я заметил, что в RTW-версии SL 3.0 автоматическая генерация прокси-сервера иногда вызывает у меня раздражение, и отмена передачи массивов / списков / общих коллекций является частью того, что происходит. Мой обходной путь - который, по общему признанию, отстой, - довольно странный: я щелкаю правой кнопкой мыши ссылку на службу, выбираю "настроить ссылку на службу", выбираю "повторно использовать типы в ссылочных сборках", а затем выясняю, какие типы / сборки должны быть повторно использовать. В конце концов, это похоже на работу.
Если это не сработает, я перезагружаю Visual Studio, и автоматическая генерация прокси часто работает на этом этапе.
Надеюсь, что это поможет, по крайней мере, направить вас в правильном направлении.