2013-12-11 23 views
17

私はJSONを初めて使用しており、助けが必要です。 jqueryでJSONを使用していて、ウェブ上で実行しているWebサービスから正しく情報を取得できます。しかし、私はそれをC#でHttpWebRequestを使用して動作させることはできません。私は以下のコードを投稿します。 Webサービスであり、私はこのコードを使用して「callJson(ストリングx)」を呼び出すことができるようにしたいC#HttpWebRequestを使用してjsonを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; 
    } 
} 

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; 
     } 

私は内部サーバーエラーを取得しておきます。タイプをapplication/jsonに変更して追加すると、

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

私は受け入れられないメディアエラーが発生します。

ありがとうございました。これが他人に役立つことを願っております。

答えて

33

まず、WebServiceに追加するScriptService属性が不足しています。その後、後

[ScriptService]

JSONを経由してWebサービスを呼び出すための方法以下試してください。

 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

マイナーコメントが、私はstreamWriter.Flush(だと思います)。使用ブロックを離れるときに自動的に呼び出されるため、不要です –

関連する問題