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, и автоматическая генерация прокси часто работает на этом этапе.

Надеюсь, что это поможет, по крайней мере, направить вас в правильном направлении.

Другие вопросы по тегам