如何使用C#进行HTTP请求,以调用返回Context.Response.Write的asmx web方法?
如何使用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())
问题的原因是:用户想要通过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("
为了使其正常工作,需要进行以下操作:
1. 根据上述问题链接中的说明,在服务的web.config文件中添加协议。
2. 将现有的ScriptMethod属性替换为[ScriptMethod(UseHttpGet = true)]。
对于用户提到的通过ajax调用或像HttpClient一样创建连接并传递和接收数据的需求,可以使用一个处理程序(handler)来实现。例如,可以像这样调用一个处理程序:image.src = "ImageHandler.ashx?id=1",它将返回context.response中的数据。对于这种需求,可以考虑使用类似的方法。
对于用户的疑问,如果希望以这种方式实现,可以直接在客户端创建一个函数并调用它。但是,通过web-method的方式可以提供一种更灵活的方法,可以通过HTTP请求来实现数据的传递和接收。
希望以上解决方法和说明对您有所帮助!