Первая проблема в том, что вы возвращаете 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.