ExecutionEngineException при вызове веб-службы HttpDuplexBinding - PullRequest
0 голосов
/ 16 июля 2009

Я боролся с веб-сервисом, который генерирует исключение 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 Ответ

0 голосов
/ 17 июля 2009

Официального ответа у меня нет, но я заметил, что в RTW-версии SL 3.0 автоматическая генерация прокси-сервера иногда вызывает у меня раздражение, и отмена передачи массивов / списков / универсальных коллекций является частью что просходит. Мой обходной путь - который, по общему признанию, отстой, - довольно странный: я щелкаю правой кнопкой мыши ссылку на службу, выбираю «настроить ссылку на службу», выбираю «повторно использовать типы в ссылочных сборках», а затем выясняю, какие типы / сборки должны быть повторно использовать. В конце концов, это похоже на работу.

Если это не сработает, я перезапускаю Visual Studio, и в этот момент часто работает автоматическое создание прокси.

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

...