У меня есть метод веб-сервиса, определенный так:
[WebMethod]
public DataTable GetResponseCodeTypes()
{
// connect to database and retrieve results,
// then populate and return a DataTable
}
Метод был проверен с помощью тестовой формы веб-сервиса и возвращает DataTable
, как и ожидалось:
<?xml version="1.0" encoding="utf-8"?>
<DataTable xmlns="http://tempuri.org/">
<DocumentElement xmlns="">
<ResponseCodeTypes>
<CodeTypeId>1</CodeTypeId>
<Descrip>RPC</Descrip>
</ResponseCodeTypes>
<ResponseCodeTypes>
<CodeTypeId>2</CodeTypeId>
<Descrip>Non-RPC</Descrip>
</ResponseCodeTypes>
<ResponseCodeTypes>
<CodeTypeId>3</CodeTypeId>
<Descrip>No connect</Descrip>
</ResponseCodeTypes>
</DocumentElement>
</DataTable>
Однако, когда я вызываю метод GetResponseCodeTypes
из внешнего кода C#, он не только возвращает DataSet
вместо DataTable
, но и возвращает DataSet
без таблиц.
Затем я пошел и изменил класс-заглушку (сгенерированный Visual Studio при добавлении веб-ссылки), чтобы вместо этого возвращать DataTable
. Это работает, поскольку я получаю DataTable
обратно, но указанное DataTable
не имеет определенных столбцов или строк.
Я знаю, что в .NET 1.x было невозможно вернуть DataTable
из метода веб-сервиса (вам пришлось обернуть его в DataSet
), но у меня сложилось впечатление, что это было исправлено в .NET 2.x...
В чем проблема?
ИЗМЕНИТЬ:
Веб-сервис — это .NET 2.0, работающий на Linux-системе под Mono 2.4.2.3; в то время как внешний код разрабатывается в .NET 2.0 на машине с Windows XP, работающей под управлением VS2008 с пакетом обновления 1 (SP1).