如何使用C#进行HTTP请求,以调用返回Context.Response.Write的asmx web方法?

12 浏览
0 Comments

如何使用C#进行HTTP请求,以调用返回Context.Response.Write的asmx web方法?

我在asmx web服务中创建了一个web方法,并且使用Context.Resopnse.Write返回纯JSON数据。

现在上述代码将把json数据写入请求的连接管道,但是如何从充当web服务客户端的c#函数中接收响应呢?

这是我的web服务方法:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetAllEmployeesFromEmpInPureJSON()
{
    SqlConnection vConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString);
    vConn.Open();
    String vQuery = "Select * from Employee";
    SqlDataAdapter vAdap = new SqlDataAdapter(vQuery, vConn);
    DataSet vDs = new DataSet();
    vAdap.Fill(vDs, "Employee");
    vConn.Close();
    DataTable vDt = vDs.Tables[0];
    Context.Response.Write(JsonConvert.SerializeObject(vDt));
}

这是客户端函数:

protected void Button1_Click(object sender, EventArgs e)
{
    Lab25WebServiceSoapClient obj = new Lab25WebServiceSoapClient();
    DataTable vDt = new DataTable();
    //String jsonstring = obj.GetAllEmployeesFromEmpInPureJSON();
    //vDt = JsonConvert.DeserializeObject(jsonstring) as DataTable;
    GridView1.DataSource = vDt;
    GridView1.DataBind();
}

这里的下面两行不起作用,因为它是一个返回void类型的方法,而下面的代码在我返回字符串而不是使用context时起作用。

String jsonstring = obj.GetAllEmployeesFromEmpInPureJSON();
vDt = JsonConvert.DeserializeObject(jsonstring) as DataTable;

我认为应该有类似这样的东西:

String jsonstring =  Context.Request(obj.GetAllEmployeesFromEmpInPureJSON())

0
0 Comments

问题的原因是:用户想要通过C#使用HttpClient来发送HTTP请求到一个返回Context.Response.Write的asmx web-method。用户之前尝试使用HttpClient来发送请求,但是没有成功。

解决方法是:

1. 在服务的web.config文件中添加协议,可以参考上述提到的问题链接中的说明。

2. 将现有的ScriptMethod属性替换为[ScriptMethod(UseHttpGet = true)]。

以下是解决方法的代码示例:

HttpClient httpClient = new HttpClient();
string result = httpClient.GetStringAsync("/Lab25WebService.asmx/GetAllEmployeesFromEmpInPureJSON").Result;

对于用户提到的需要通过ajax调用或者像HttpClient一样创建连接并传递和接收数据的需求,可以使用一个处理程序(handler)来实现。例如,可以像这样调用一个处理程序:image.src = "ImageHandler.ashx?id=1",它将返回context.response中的数据。对于这种需求,可以考虑使用类似的方法。

如何使用C#通过asmx web-method进行HTTP请求并返回Context.Response.Write?

用户可以使用HttpClient来消费这个服务,示例如下:

HttpClient httpClient = new HttpClient();

string result = httpClient.GetStringAsync("/Lab25WebService.asmx/GetAllEmployeesFromEmpInPureJSON").Result;

为了使其正常工作,需要进行以下操作:

1. 根据上述问题链接中的说明,在服务的web.config文件中添加协议。

2. 将现有的ScriptMethod属性替换为[ScriptMethod(UseHttpGet = true)]。

对于用户提到的通过ajax调用或像HttpClient一样创建连接并传递和接收数据的需求,可以使用一个处理程序(handler)来实现。例如,可以像这样调用一个处理程序:image.src = "ImageHandler.ashx?id=1",它将返回context.response中的数据。对于这种需求,可以考虑使用类似的方法。

对于用户的疑问,如果希望以这种方式实现,可以直接在客户端创建一个函数并调用它。但是,通过web-method的方式可以提供一种更灵活的方法,可以通过HTTP请求来实现数据的传递和接收。

希望以上解决方法和说明对您有所帮助!

0