2013-12-11 28 views
17

Sono nuovo di JSON e ho bisogno di aiuto. Ho alcuni JSON che funzionano in jquery e recuperano le informazioni correttamente dal servizio web che ho in esecuzione sul web. Tuttavia, non riesco a farlo funzionare con HttpWebRequest in C#. Pubblicherò il codice qui sotto.Usa C# HttpWebRequest per inviare json al servizio web

/// <summary> 
/// Summary description for VBRService 
/// </summary> 
[WebService(Namespace = "http://test.visitblueridge.com/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class VBRService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 

    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string callJson(string x) 
    { 
     return "Worked =" + x; 
    } 
} 

che si trova sul servizio web e voglio essere in grado di chiamare "callJson (string x)" utilizzando questo codice,

var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr); 
     httpWebRequest.ContentType = "text/json"; 
     httpWebRequest.Method = "POST"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = "{\"x\":\"true\"}"; 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var result = streamReader.ReadToEnd(); 
      return result; 
     } 

Continuo a ricevere un errore interno del server. Quando cambio il tipo di applicazione/json e aggiungi,

request.Headers.Add("SOAPAction", "http://test.visitblueridge.com/callJson"); 

Viene visualizzato un errore di media non accettato.

Grazie in anticipo e spero che questo aiuti gli altri.

risposta

33

Prima di tutto si è perso l'attributo ScriptService da aggiungere nel servizio web.

[ScriptService]

Dopo quindi provare seguente metodo per chiamare webservice tramite JSON.

 var webAddr = "http://Domain/VBRService.asmx/callJson"; 
     var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr); 
     httpWebRequest.ContentType = "application/json; charset=utf-8"; 
     httpWebRequest.Method = "POST";    

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = "{\"x\":\"true\"}"; 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var result = streamReader.ReadToEnd(); 
      return result; 
     } 
+11

commento minore, ma penso che lo StreamWriter.Flush(); non è necessario in quanto verrà chiamato automaticamente quando si esce dal blocco di utilizzo –

Problemi correlati