Ich fange an, WCF zu verwenden, um einen Webdienst anstelle der alten asp.net asmx-Möglichkeit zu schreiben. Ich möchte JSON zurückgeben können, damit ich es nicht auf die alte Art machen kann. Wenn ich eine Zeichenkette oder int zurückschicke, funktioniert der Web Service gut, aber wenn ich versuche, eine DataTable zurückzugeben, reagiert sie nicht mehr und ich bekomme nichts. Ich habe versucht zu debuggen, um zu sehen, wo es explodiert und es wird nicht einmal an einem Haltepunkt anhalten.WCF-WebService, das DataTable nicht zurückgibt
My Class-Datei sieht wie folgt aus:
[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();
Die json
Verfahren sowie die xml
Methode funktioniert völlig in Ordnung:
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;
}
Meine Interface-Datei sieht wie folgt aus. Wenn ich TestDT anrufe, bekomme ich eine Standard-IE-Seite, die keine Verbindung anzeigt. Ich habe es mit Daten oder ohne Daten in der Datei mit den gleichen Ergebnissen versucht.
Ein weiterer Hinweis hier: wenn ich den WCF-Dienst lokal (Schlagen PLAY) meine Testanwendung ausführen zeigt nun Dienste, die ich sehe:
Wie kann ich dies mit einem datierbaren zu arbeiten?
Bearbeiten # 1: Ich löste das Problem mit den Daten nicht zurück. Ich habe es schließlich aufgegeben, einen Datensatz zurückzusenden, und stattdessen habe ich ein gezacktes Array erstellt und es als JSON zurückgegeben. Ich werde es später als Antwort veröffentlichen, damit die Leute wissen, wie ich es gemacht habe. Was ich jetzt mehr wissen möchte, ist Teil 2. Warum zeigt mein WCF-Test-Client keine Methoden an? (Siehe Bild beigefügt) Meine Vermutung bezieht sich auf die web.config, also poste ich das unten:
<?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>
Überlegen Sie, ob Sie mit Datenvertrag zurückkehren. Wenn nur eine Spalte mit mehreren Zeilen vorhanden ist, können Sie eine Rückgabe als Liste (Zeichenfolge) in Erwägung ziehen. – Baskar
Mögliches Duplikat von [Rückgabe von DataTables in WCF/.NET] (http://stackoverflow.com/questions/12702/returning-datatables-in-wcf-net) – tomcater