WCF WebService не возвращает DataTable
Я начинаю использовать WCF для написания веб-службы вместо старого asmx aspx. Я хочу иметь возможность вернуть JSON, поэтому я не могу сделать это по-старому. Если я возвращаю строку или int, веб-служба работает нормально, но если я пытаюсь вернуть DataTable, она перестает отвечать, и я ничего не получаю. Я попытался отладить, чтобы увидеть, где он взрывается, и он даже не остановится на точке останова.
Мой файл Class выглядит следующим образом:
public string XMLData(string id)
{
return "You requested " + id;
}
public string JSONData(string id)
{
return "You requested " + id;
}
public DataTable TestDT()
{
DataTable Testing = new DataTable("TestDT");
return Testing;
}
Мой интерфейсный файл выглядит так:
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "xml/{id}")]
string XMLData(string id);
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "json/{id}")]
string JSONData(string id);
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "testdt/")]
DataTable TestDT();
json
метод, а также xml
Метод работает отлично. Когда я вызываю TestDT, я получаю стандартную страницу IE, на которой нет подключения. Я пробовал это с данными или без данных в таблице с теми же результатами.
Еще одно замечание: когда я запускаю службу WCF локально (Hiting PLAY), мое тестовое приложение показывает теперь службы, которые я вижу так:
Как я могу заставить это работать с данными?
Редактирование #1: Я действительно решил проблему с данными, не возвращающимися. Я, наконец, разочаровался в попытке вернуть набор данных, и вместо этого я создал неровный массив и в итоге возвратил его как JSON. Я отправлю это позже как ответ, чтобы люди знали, как я это сделал. Теперь мне больше всего интересно знать, что такое часть 2. Почему мой тестовый клиент WCF не показывает какие-либо методы (см. Прилагаемое изображение). Моя догадка связана с web.config, поэтому я публикую это ниже:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="DBDjuggleWS" connectionString="Data Source=localhost;Initial Catalog=PrayUpDev;Persist Security Info=True;User=DjuggleMaster;Password=DJPassword!" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name ="PrayUpService.PrayUp" behaviorConfiguration="ServiceBehaviour">
<endpoint address="" binding="webHttpBinding" contract="PrayUpService.IPrayUp" behaviorConfiguration ="web"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
1 ответ
Ты должен вернуться DataSet
вместо DataTable
но возврат наборов данных из веб-сервисов обычно не считается "хорошей практикой". здесь вы можете прочитать об этом: почему возврат набора данных или таблицы данных из службы WCF не является хорошей практикой? Какие есть альтернативы?
я настоятельно рекомендую использовать DataSet’s
методы для получения данных в формате XML и передачи строки XML вместо DataSet
Сам на службу.
PassDataSet(dsDataSet.GetXmlSchema(), dsDataSet.GetXml())