ASMX Webservice: ошибка «анонимных типов» - PullRequest
1 голос
/ 10 января 2012

Я создаю asmx webservice на существующем .Net 3.5 веб-сайте.Я хотел бы вернуть пост на основе ключа.Я хотел бы вернуть сообщение как анонимный тип , но оно дает мне следующую ошибку:

Функция «анонимные типы» не может использоваться, поскольку она не является частьюспецификация языка ISO-2 C #.

Вот скриншот проблемы: Feature 'anonymous types' cannot be used because it is not part of the ISO-2 C# language specification

Есть идеи, как решить эту проблему?

Примечание: мой asmx стоит сам по себе.Он содержит код, за ним нет .cs.

Ответы [ 4 ]

8 голосов
/ 10 января 2012

Первая проблема в том, что вы возвращаете object.

Поскольку WebService создает определения (WSDL), как вы ожидаете, что определение будет сгенерировано без знания фактического типа?

Вы должны ввести класс в стиле DTO (без логики, только данные), например:

[Serializable]
public class Post
{
    public int PostID {get;set;}
    public int ThreadID { get; set; }
    public string Subject { get; set; }
    public string Body { get; set;}
}

И измените свое определение, чтобы оно возвращало такой класс.

Количество кода довольно легкое.

[Редактировать] Приведенное выше решение решит вашу проблему. Тем не менее, точный источник проблемы заключается в следующем:

Когда вы работаете в файле .cs, используемый компилятор является компилятором целевой платформы вашего проекта (3.5 здесь). Компиляция происходит во время кодирования.

Когда вы работаете в файле .asmx, компиляция происходит при загрузке приложения asp.net. Компилятор используется в компиляторе среды выполнения asp.net, которая для .Net 3.5 является компилятором для среды выполнения 2.0. Это потому, что Framework 3.5 - это только новый набор классов, но CLR все еще находится в V2 (изменено с V4). В этом случае, даже если ваш проект в версии 3.5, только код в файлах .cs может использовать функции языка 3.5. Весь код в файлах aspx и asmx может использовать только функцию языка V2.

2 голосов
/ 10 января 2012

Это веб-сайт или веб-приложение?

Возможно, вы установили более раннюю версию langversion для своего проекта.

Посмотрите на это: http://msdn.microsoft.com/en-us/library/f4ckecs0(v=vs.110).aspx

Если это веб-сайт, проверьтечто установлено в web.config в разделе компилятора.Если имеется атрибут:

<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/langversion:ISO-2"  ... >

, удалите параметр langversion или измените его на

compilerOptions="/langversion:3"
1 голос
/ 10 января 2012

Технология WebService основана на XML-документах, известных как WSDL, которые содержат описание функций, параметров и типов возврата вашего сервиса.Клиенты вашего веб-сервиса знают, чего ожидать от вашего сервиса от этого документа.Если вы не укажете тип возврата, документ не может быть создан.Вы должны вернуть объект определенного класса в вашу функцию.

1 голос
/ 10 января 2012

Я думаю, у вас есть ответ.

Если бы я был вами, я бы просто создал POCO (простой старый объект C #), который моделирует анонимную структуру, которую вы хотите передать.

...