0

私たちが持っている汎用ハンドラーからメソッドを呼び出すのに少し問題があります。単純な「HelloWorld()」メソッドを呼び出すために 2 つの別々の手法を使用しようとしましたが、2 つの異なるエラーが発生します。

最初のテクニックは次のとおりです。

        WebClient wc = new WebClient();

        NameValueCollection formData = new NameValueCollection();
        formData["method"] = "HelloWorld";


        byte[] data;

        try
        {
            data = wc.UploadValues(_domain, formData);
        }
        catch (WebException ex)
        {
            Label1.Text = ex.Message;
            return;
        }

        string response = Encoding.UTF8.GetString(data);
        Label1.Text = response;

        wc.Dispose();

次のエラーが表示されます。

{"id":null,"error":{"name":"Found String where Object was expected."}}

私が試した2番目のテクニックは次のとおりです。

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

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"method\":\"helloWorld\"}"; //," +
            //"\"password\":\"bla\"}";

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

            try
            {
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                }
            }
            catch (WebException wex)
            {
                Label2.Text = wex.Message;
            }
            catch (Exception ex)
            {
                Label2.Text = ex.Message;
            }
        }

これで、次のエラーが表示されます。

The remote server returned an error: (500) Internal Server Error.

「.ashx?test」ページから呼び出しをテストすると、メソッドが実行され、画面の下部に詳細が表示されます。

Pragma: no-cache
Date: Tue, 23 Jul 2013 13:46:19 GMT
Server: ASP.NET Development Server/11.0.0.0
X-AspNet-Version: 2.0.50727
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache
Connection: Close
Content-Length: 32
Expires: -1

なぜこれが機能しないのかについてのアイデアはありますか?

ありがとう!

4

1 に答える 1

4

ASHX ハンドラーは Web サービスではありません。ASXH ハンドラー内でメソッドを呼び出さないでください。ハンドラーを呼び出すだけで、テキスト データであれバイナリ データであれ、データを直接配信します。それはあなた次第です。

于 2013-07-23T13:53:55.813 に答える