2017-02-03 5 views
2

Ich brauche etwas Hilfe in diesem Zusammenhang. Sei bitte sanft zu mir, ich bin kein Experte - noch nicht.C# webservice return error

Die Sache ist, dass ich versuche, Daten von einem Client (Browser) an den Server (Webservice) über JSON zu senden. Wenn ich die POST-Daten in Fiddler betrachte, kann ich den JSON sehen, den ich sende. Dies ist gültig (getestet). Aber mein Webservice, (wenn ich manuell testen dann bekomme ich eine Rückkehr OK), gibt folgendes zurück: "{" Nachricht ":" Es gab einen Fehler bei der Verarbeitung der Anfrage. "," StackTrace ":" "," ExceptionType ": ""} "

Leider ist es nur für den internen Gebrauch, so dass ich den Webservice für Sie nicht veröffentlichen kann.

Kann mir jemand erklären, was falsch ist?

1.) Javascript-Code:

<script> 
    var markers = "{param1:1, param2:\"test\"}"; 

    $.ajax({ 
     type: "POST", 
     url: "http://xxx.xxx.xxx.xxx/site/util.asmx/CreateMarkers", 
     // The key needs to match your method's input parameter (case-sensitive). 
     data: JSON.stringify({ Markers: markers }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { alert(data); }, 
     failure: function (errMsg) { 
      alert(errMsg); 
     } 
     }); 
</script> 

2.) asmx Code

<%@ WebService Language="C#" Class="site.Util" %> 
using System; 
using System.Web.Services; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Script.Services; 

namespace site{ 

[WebService(Namespace="http://xxx.xxx.xxx.xxx/site/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

public class Util: WebService 
{  
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string CreateMarkers(int param1, string param2) 
    { 
    return "OK"; 
    } 
} 
+1

Versuchen ohne stringifying übereinstimmen gesendet: Daten: Marker, ... Es sieht so aus, als wären Ihre Daten bereits im JSON-Format mit passenden Parametern für param1, param2. Sie möchten keine Root-Marker-Eigenschaft. – Andez

+1

Sie können auch versuchen, eine App wie Postman (https://www.getpostman.com/) zu verwenden, um Ihre Web-Service-API zu testen. Es ist eigenständig oder als Plugin für Browser verfügbar. Es ermöglicht Ihnen, die reine API zum Senden und Empfangen von Daten zu testen, so dass Sie sicher sein können, dass das, was Sie senden und empfangen, wie erwartet ist –

+0

@Andez Danke, aber ohne Ihre Änderung ist das, was ich in fiddler sehen kann: {"Marker" : "{param1: 1, param2: \" test \ ""} Ich nehme an, dieser Teil ist korrekt, wenn ich ihn ändere, wie Sie vorschlagen, dann bekomme ich {param1: 1, param2: "test"}, was kein gültiger JSON ist. Vielleicht kann ich das nicht richtig verstehen. Kannst du mir weiter helfen? –

Antwort

1

Versuchen Sie die Formatierung der Daten der Web-Service-Methode

<script> 
    var markers = {param1:1, param2:"test"}; //<-- format the model 

    $.ajax({ 
     type: "POST", 
     url: "http://xxx.xxx.xxx.xxx/site/util.asmx/CreateMarkers", 
     // The key needs to match your method's input parameter (case-sensitive). 
     data: JSON.stringify(markers), //<-- just send the markers 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { alert(data); }, 
     failure: function (errMsg) { 
      alert(errMsg); 
     } 
    }); 
</script> 
+1

in Antwort oben, Marker wird vor dem Senden stringifiziert. Im Script-Code 'var markers' ist ein JavaScript-Objekt nicht JSON, daher der Grund dafür, dass es vor dem Senden geschrieben wird. Was siehst du in Fiddler, wenn du den obigen Vorschlag verwendest? – Nkosi

+0

Das muss es sein. Sie sind der zweite, der auf diese Weise das Problem löst. Aber wie soll ich einen JSON ohne eine Wurzel senden (Marker) und immer noch einen vailid json haben? Ich habe die asmx so geändert, dass sie nur eine Zeichenkette in der Signatur hat. Und dann das Skript in var markers ändern = "[\" Ford \ ", \" BMW \ ", \" Fiat \ "]"; Aber immer noch der gleiche Fehler –

+0

Dann sehe ich das in Fiedler: ["Ford", "BMW", "Fiat"]. Die Antwort vom Webservice ist immer noch: {"Nachricht": "Beim Verarbeiten der Anfrage ist ein Fehler aufgetreten.", "StackTrace": "", "ExceptionType": ""} –