Asmx-web-service die Rückgabe von xml statt json, Versuchen zu entfernen <string xmlns="http://tempuri.org/"> aus service-Ausgabe
Ich gesucht habe 100 von links für die letzten 3 Stunden zB hinzufügen scriptfactory zu webconfig, 3 Fehler, Einstellung, Inhalt, Art etc.
Ich bin nicht in der Lage, herauszufinden, was eigentlich der Fehler ist.
Umgebung:
Dienst auf .net 4.0
Web-Anwendung läuft .net 4.0
Anforderungen:
Ich brauche zu binden, jqGrid mit asmx-web-service, der ist wieder in mich ein json als string.
Web-service-Datei enthält folgenden code.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class SampleService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetJsonServerProcess()
{
int memory = 1;
string json = string.Empty;
var obj = (System.Diagnostics.Process.GetProcesses().Where(r => r.WorkingSet64 > memory).Select(p => new { p.ProcessName, p.WorkingSet64 }).ToArray());
json = Lib.ToJSON(obj);
return json;
}
}
Javascript ist wie folgt
<script type="text/javascript">
$(document).ready(function () {
jQuery("#jqgajax").jqGrid({
ajaxGridOptions: { type: "POST", contentType: 'application/json; charset=utf-8' },
url:'http://localhost:1092/SampleService.asmx/GetJsonServerProcess',
datatype: "json",
data: "{}",
colNames: ['ProcessName', 'WorkingSet64'],
colModel: [
{ name: 'ProcessName', index: 'ProcessName', width: 55 },
{ name: 'WorkingSet64', index: 'WorkingSet64', width: 90 }
],
rowNum: 10,
width: 700,
rowList: [10, 20, 30],
sortname: 'invdate',
viewrecords: true,
sortorder: "desc",
caption: "New API Example"
});
});
</script>
HTML ist wie folgt
<table id="jqgajax">
</table>
<div id="jqgajax">
</div>
Web Service-Ausgabe beim Klick auf den button Invoke
<string xmlns="http://tempuri.org/">
[{"ProcessName":"Dropbox","WorkingSet64":22736896},
{"ProcessName":"fdhost","WorkingSet64":1941504},
{"ProcessName":"IntelliTrace","WorkingSet64":39276544}
]
</string>
Bitte vorschlagen, was ist es, was mir fehlt.
<string xmlns="http://tempuri.org/">
tags reizt mich. Ich gehe davon aus, dass diese tags sind nicht lassen mein raster binden können.
UPDATE:
ASMX service sieht jetzt aus wie unten.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class SampleService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<demo> GetJsonServerProcess()
{
List<demo> test = new List<demo>();
for(int i=1;i<=10;i++)
test.Add(new demo { ProcessName = string.Format("Sample {0}",i), WorkingSet64 = i });
var re = test;
return re;
}
}
public class demo
{
public string ProcessName { get; set; }
public int WorkingSet64 { get; set; }
}
- Mögliche Duplikate von:stackoverflow.com/questions/11088294/...
- Die Fragen sind ähnlich, aber die Lösungen sind unterschiedlich. In der verlinkten Lösung, das zu beheben war das web ändern.config-Datei, in dieser Lösung, die Lösung ist das ändern des Content-Type-header. Sie dürfen sich nicht gegenseitig ausschließen Lösungen obwohl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klick auf den button Invoke XML zurückgibt, weil die Anfrage nicht angegeben
contentType: 'application/json; charset=utf-8'
. Also das experiment mit einem Klick auf den button Invoke helfen nicht wirklich.Dem wichtigsten problem in deinem code ist, dass Sie konvertieren die Daten zu einem string innerhalb der web-Methode. Die Linie
sind nicht erforderlich. Was man normalerweise Rücksendung der Sache widerrufen. Die
GetJsonServerProcess
sollte geändert werden, um so etwas wieDas nächste problem ist, dass die Standard-input-format, die darauf warten jqGrid ist eine andere (siehe hier). Damit Sie die Höhle, um anzugeben
jsonReader
welche die Daten beschreiben-format. In deinem Fall wird es etwas sein, wieAußerdem sollten Sie nie verwenden
http://localhost:1092/
Präfix in Ajaxurl
weil Sie cal nur Daten von der gleichen Website aus Sicherheitsgründen. Diedata
parameter in jqGrid andere Bedeutung hat als in jQuery so sollten Sie entfernendata: "{}"
und bewegentype: "POST"
ausajaxGridOptions
zumtype: "POST"
. Als Ergebnis haben Sie so etwas wieIch nicht getestet, der code, aber es sollte mehr in der Nähe, was Sie brauchen.
AKTUALISIERT: sollte Man den code ändern
jsonReader
. Sie können die arbeiten demo hier. Es zeigt das rasterIch verwendet auf der server-Seite den code
und auf der client-Seite
you should never use http://localhost:1092/ prefix in Ajax url
derzeit habe ich zwei verschiedene Lösungen für die Dienstleistungen anderer für web-Anwendung. Ich habe nicht hosted service auf dem IIS ab sofort und ist direkt mit diesem service in eine andere Anwendung, die für Testzwecke. Ich war versucht zu implementieren jqGrid. Also in diesem Szenario, Wenn ich mit vollen Pfad für den service Würde das funktionieren?. In der live-Anwendung, die ich kümmern url. Ich werde versuchen alle Eure Vorschläge. Aber Es war eine harte Zeit bis jetzt läuft dies. Vielen Dank für Ihre Unterstützung.http://localhost:1092/
hat keinen Sinn. Sollten Sie nur web-service und den entsprechen HTML/ASPX-Seite auf dieselbe web-server. Alternativ können Sie die JSONP statt JSON, aber in dem Fall ist es komplexer implementiert, Benutzer-Authentifizierung, so dass man ihn meist für öffentliche web-services.<string xmlns="http://tempuri.org/">
<string xmlns="http://tempuri.org/">
weil Sie zusätzliche Serialisierung nach JSON. Also zu aller erst sollten Sie entfernen, die zweite Serialisierung und post den geänderten code.root: function (obj) { return obj.d; }, records: function (obj) { return obj.d.length; }
innerhalb vonjsonReader
. Sie können herunterladen voll funktionsfähige demo-Projekt von hier.Okay, ich habe den gleichen Fehler und nach einer Belastung von Versuch und Irrtum hier meine "quick-and-dirty" - Lösung;
Der folgende code sollte den trick tun:
Dieser code funktioniert perfekt
Bevor die Funktion startet, legen Sie die unten
machen, die Funktion als void
wenn die Funktion endet unten line
Beispiel Programm
Gültige JSON-Antwort verwenden Sie diesen code..