web-dev-qa-db-ja.com

C#HttpWebRequestを使用してWebサービスにJSONを送信します

私はJSONが初めてなので、助けが必要です。 jqueryで動作するJSONがいくつかあり、Webで実行しているWebサービスから情報を正しく取得します。ただし、C#でHttpWebRequestを使用して動作させることはできません。以下のコードを投稿します。

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

これはWebサービス上にあり、このコードを使用して「callJson(string 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");

受け入れられないメディアエラーが表示されます。

事前に感謝し、これが他の人に役立つことを願っています。

19
user3003510

まず、Webサービスに追加するScriptService属性がありません。

その後、次のメソッドを試して、JSON経由でwebserviceを呼び出します。

[$ = CODE!].

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