locked
Kein JSON response, XML ? RRS feed

  • Frage

  • Guten Morgen zusammen

    Ich benutze einen Webservice um in einer Javascript Methode eine GUID zu erhalten.

    Die Methode ist einfach gestrickt :

    Imports System.Web.Services
    Imports System.ComponentModel
    Imports Ext.Net
    
    <System.Web.Script.Services.ScriptService()> _
    <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
    <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <ToolboxItem(False)> _
    Public Class GUIDProvider
      Inherits System.Web.Services.WebService
    
      <WebMethod()>
      Public Function GetGUID() As String
    
        Dim newGuidContainer As New GUIDContainer()
        newGuidContainer.Id = Guid.NewGuid()
    
        Return JSON.Serialize(newGuidContainer)
      End Function
    
    End Class
    
    <Serializable()>
    Public Class GUIDContainer
      Public Property Id As Guid
    End Class

    Auf meinem Entwicklungs PC ist der Response sauber so, wie ich es erwarte :

    {"d":"{\"Id\":\"5588c244-a7a9-43b7-b256-81c49f966f34\"}"}

    Anders sieht es auf unserem Test Server aus :

    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://tempuri.org/">{"Id":"8654d1e0-d4ae-41aa-b2de-56c8a4cf34af"}</string>

    Was ist hier nur falsch ? Leider habe ich keinen direkten Zugriff auf den Testserver, der wird von einer anderen Abteilung gepflegt.

    Gruss und danke für Eure hilfe
    Peter

    Mittwoch, 24. Juli 2013 09:58

Antworten

  • Hallo Peter,

    WebMethod geht eigentlich zu einem XML Webservices. Für eine REST Service, der XML als auch JSON können soll, sind die WebGet / WebInvoke Methoden meines Erachtens besser geeignet. Bei denen kannst Du über die Meta-Daten auch festlegen, das JSON geliefert werden soll:

    <WebGet(RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json)> _
    Public Function GetGUID() As String
        Dim newGuidContainer As New GUIDContainer()
        newGuidContainer.Id = Guid.NewGuid()
    
        Return newGuidContainer.Id.ToString()
    End Function


    Olaf Helper

    Blog Xing

    Freitag, 26. Juli 2013 12:30

Alle Antworten

  • Hallo Peter,

    zeig doch mal bitte den JavaScript Code, mit dem Du den Webservice aufrufst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 24. Juli 2013 10:20
  • Hi Peter,

    vielleicht kann dir das weiter helfen (Letzte Post im Link).

    MFG

    Björn

    Mittwoch, 24. Juli 2013 10:25
  • Mein Aufruf läuft über diese Methode :

      var result = GetSynchronousJSONResponse('../controls/GUIDProvider/GUIDProvider.asmx/GetGUID', null);
      var guid = JSON.parse(JSON.parse(result).d).Id;

    // Helper Function for Synchronous Ajax Call
    function GetSynchronousJSONResponse(url, postData) {
    	var request = null;
    	var versions = new Array("MSXML2.XMLHttp", "Microsoft.XMLHttp", "MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0");
    
    	if (document.getElementById) {
    		if (window.XMLHttpRequest) {
    			request = new XMLHttpRequest();
    		} else if (window.ActiveXObject) {
    			for (var i = 0; i < versions.length; i++) {
    				try {
    					request = new ActiveXObject(versions[i]);
    				} catch (exception) {
    					throw new Error(503, 'AJAX Communication is not avaliable for this Request !');
    				}
    			}
    		}
    	}
    
    	// to be ensure non-cached version of response
    	var randomNumber = Math.random();
    	url = url + "?rnd=" + randomNumber;
    
    	request.open("POST", url, false);//false means synchronous
    	request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    	request.send(postData);
    	var responseText = request.responseText;
    
    	request = null;
    
    	return responseText;
      
    
    };

    Mittwoch, 24. Juli 2013 10:40
  • Hi Björn

    Denke nicht, dass der Serializer das Problem ist. Ich habe langsam den Verdacht, dass ich eher in der IIS Installation auf unserem Testserver zu suchen habe - wenn ich denn mal Zugang bekomme :-(

    Danke aber trotzdem für den Tipp. Ein Custom ActionResult ist auch eine feine Sache. Die Formatierungsmöglichkeiten sind schon mal sehr gut !

    Gruss

    Peter

    Mittwoch, 24. Juli 2013 12:35
  • Hallo Peter,

    WebMethod geht eigentlich zu einem XML Webservices. Für eine REST Service, der XML als auch JSON können soll, sind die WebGet / WebInvoke Methoden meines Erachtens besser geeignet. Bei denen kannst Du über die Meta-Daten auch festlegen, das JSON geliefert werden soll:

    <WebGet(RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json)> _
    Public Function GetGUID() As String
        Dim newGuidContainer As New GUIDContainer()
        newGuidContainer.Id = Guid.NewGuid()
    
        Return newGuidContainer.Id.ToString()
    End Function


    Olaf Helper

    Blog Xing

    Freitag, 26. Juli 2013 12:30
  • Ha ! Das war es !

    Danke Dir Olaf, läuft perfekt :-)

    Gruss
    Peter

    Montag, 29. Juli 2013 08:16