Вызов методов из обработчика .ashx со страницы aspx.cs

У меня возникли проблемы с вызовом метода из общего обработчика, который у нас есть. Я пытался использовать два отдельных метода для вызова простого метода «HelloWorld()», но получаю две разные ошибки:

Первая техника заключается в следующем:

        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."}}

и второй метод, который я пробовал:

            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

Любые идеи относительно того, почему это не будет работать?

Спасибо!


person donpisci    schedule 23.07.2013    source источник
comment
Никогда не должно быть необходимости вызывать обработчик ashx со страницы aspx. Рефакторинг вашего кода, чтобы логика внутри обработчика ashx была перемещена в повторно используемый класс.   -  person Brad M    schedule 23.07.2013
comment
@BradM, может быть, это на другом сервере ...   -  person Mr47    schedule 23.07.2013
comment
@BradM К сожалению, именно так нам и нужно поступить в данном случае.   -  person donpisci    schedule 23.07.2013
comment
@ Mr47 Возможно, но он заявляет, что у нас есть обработчик.   -  person Brad M    schedule 23.07.2013


Ответы (1)


Обработчик ASHX не является веб-службой. Вы не вызываете методы внутри обработчика ASXH. Вы просто вызываете обработчик, и он доставляет данные напрямую, будь то текст или двоичные данные — решать вам.

person Alexander    schedule 23.07.2013
comment
Каким будет лучший способ вызвать обработчик? Имея в виду, что я ничего не могу реорганизовать. - person donpisci; 23.07.2013
comment
Что вы видите, когда вызываете ASHX в браузере? Что должен вернуть HelloWorld? - person Alexander; 23.07.2013
comment
Он возвращает json, и этот конкретный метод просто возвращает строку. - person donpisci; 23.07.2013
comment
Ну, вы можете работать только с тем, что возвращает обработчик. Сделайте WebRequest и используйте содержимое ответа. Должен быть чистый текст. - person Alexander; 23.07.2013
comment
Хорошо, это здорово, я попробую. Спасибо за вашу помощь! - person donpisci; 23.07.2013