2013-04-14 2 views
2

У меня есть этот общий обработчик в C#:Сопряжение с Generic Handler

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace RequestResponse 
{ 
    public class Handler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      context.Response.ContentType = "text/plain"; 
      string function = context.Request.QueryString["function"]; 

      Methods m = new Methods(); 

      if(function.Equals("addition")) 
      { 
       int num1 = Convert.ToInt32(context.Request.QueryString["num1"]); 
       int num2 = Convert.ToInt32(context.Request.QueryString["num2"]); 
       int answer = m.addition(num1, num2); 
       context.Response.Write(answer); 
      } 

      if (function.Equals("subtraction")) 
      { 
       int num1 = Convert.ToInt32(context.Request.QueryString["num1"]); 
       int num2 = Convert.ToInt32(context.Request.QueryString["num2"]); 
       int answer = m.subtraction(num1, num2); 
       context.Response.Write(answer); 
      } 

      if(function.Equals("reverseString")) 
      { 
       string text = context.Request.QueryString["text"]; 
       text = m.reverseString(text); 
       context.Response.Write(text); 
      } 

      if (function.Equals("CalculateMD5Hash")) 
      { 
       string text = context.Request.QueryString["text"]; 
       text = m.CalculateMD5Hash(text); 
       context.Response.Write(text); 
      } 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

У меня также есть это клиентское приложение:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Net; 

namespace Client 
{ 
    public partial class HomePage : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (TextBox_Function.Text.Equals("addition")) 
      { 
       int num1 = Convert.ToInt32(TextBox_Num1.Text); 
       int num2 = Convert.ToInt32(TextBox_Num2.Text); 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&num1=" + num1 + "&num2=" + num2); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       String answer = response.ToString(); 
       Session["answer"] = answer; 
       Response.Redirect("Results.aspx"); 
      } 

      if (TextBox_Function.Text.Equals("subtraction")) 
      { 
       int num1 = Convert.ToInt32(TextBox_Num1.Text); 
       int num2 = Convert.ToInt32(TextBox_Num2.Text); 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&num1=" + num1 + "&num2=" + num2); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       String answer = response.ToString(); 
       Session["answer"] = answer; 
       Response.Redirect("Results.aspx"); 
      } 

      if (TextBox_Function.Text.Equals("reverseString")) 
      { 
       String text = TextBox_Text.Text; 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&text=" + text); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       String answer = response.ToString(); 
       Session["answer"] = answer; 
       Response.Redirect("Results.aspx"); 
      } 

      if (TextBox_Function.Text.Equals("CalculateMD5Hash")) 
      { 
       String text = TextBox_Text.Text; 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&text=" + text); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       String answer = response.ToString(); 
       Session["answer"] = answer; 
       Response.Redirect("Results.aspx"); 
      } 
     } 
    } 
} 

Теперь, давайте предположим, что в моем клиентском приложении, я обеспечиваю «добавление» в качестве функции «3» как num1 и «5» в качестве num2.

Почему ответ генерируется (хранится в переменной ответа) является:

System.Net.HttpWebResponse

Что я делаю неправильно? Пожалуйста, несите меня, поскольку я никогда не общался между двумя приложениями таким образом.

+0

Что вы сделали неправильно, так это то, что вы не смотрели документацию для класса HttpWebResponse. Пойдите, сделайте это сейчас. –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

@JohnSaunders Ok спасибо – Matthew

ответ

1

Проблемы здесь:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
String answer = response.ToString(); 

Вы просто звоните ToString() на HttpWebResponse, в то время как по-видимому, что вы действительно хотите сделать, это получить содержимое тела ответа - что вы» d делать с чем-то вроде этого:

// It's important to dispose of responses... 
using (var response = request.GetResponse()) 
{ 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     string answer = reader.ReadToEnd(); 
    } 
} 
+0

Большое вам спасибо за ваш ответ. Решение отлично работало :) – Matthew

Смежные вопросы