zoukankan      html  css  js  c++  java
  • C# 使用 HttpPost 请求调用 WebService

    之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 WebService。这里还想说一句,还是 web api 的调用简单。

    WebService 服务端代码:

       public class WebServiceDemo : System.Web.Services.WebService
        {
    
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
    
            [WebMethod]
            public string Sum(string param1, string param2)
            {
                int num1 = Convert.ToInt32(param1);
                int num2 = Convert.ToInt32(param2);
    
                int sum = num1 + num2;
    
                return sum.ToString();
            }
        }

    很简单的代码,只是用于演示。

    客户端调用代码:

    class Program
        {
            static void Main(string[] args)
            {
                Program program = new Program();
                string url = "http://localhost:12544/WebServiceDemo.asmx";
                string method = "Sum";
                string num1 = "1";
                string num2 = "2";
    
                string result = program.HttpPostWebService(url, method, num1, num2);
    
                Console.WriteLine(result);
                Console.ReadKey();
            }
    
            public string HttpPostWebService(string url,string method,string num1,string num2)
            {
                string result = string.Empty;
                string param = string.Empty;
                byte[] bytes = null;
    
                Stream writer = null;
                HttpWebRequest request = null;
                HttpWebResponse response = null;
    
                param = HttpUtility.UrlEncode("param1") + "=" + HttpUtility.UrlEncode(num1) + "&" + HttpUtility.UrlEncode("param2") + "=" + HttpUtility.UrlEncode(num2);
                bytes = Encoding.UTF8.GetBytes(param);
    
                request = (HttpWebRequest)WebRequest.Create(url + "/" + method);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = bytes.Length;
    
                try
                {
                    writer = request.GetRequestStream();        //获取用于写入请求数据的Stream对象
                }
                catch (Exception ex)
                {
                    return "";
                }
    
                writer.Write(bytes, 0, bytes.Length);       //把参数数据写入请求数据流
                writer.Close();
    
                try
                {
                    response = (HttpWebResponse)request.GetResponse();      //获得响应
                }
                catch (WebException ex)
                {
                    return "";
                }
    
                #region 这种方式读取到的是一个返回的结果字符串
                Stream stream = response.GetResponseStream();        //获取响应流
                XmlTextReader Reader = new XmlTextReader(stream);
                Reader.MoveToContent();
                result = Reader.ReadInnerXml();
                #endregion
    
                #region 这种方式读取到的是一个Xml格式的字符串
                //StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                //result = reader.ReadToEnd();
                #endregion 
    
                response.Dispose();
                response.Close();
    
                //reader.Close();
                //reader.Dispose();
    
                Reader.Dispose();
                Reader.Close();
    
                stream.Dispose();
                stream.Close();
    
                return result;
            }
        }

    第一种读取方式的返回结果:

    第二种读取方式的返回结果:

    PS:如果遇到调用时报错,可以尝试在服务端(即WebService)的 web.config 配置中添加如下配置节点。

     <system.web>
        <webServices>
          <protocols>
            <add name="HttpPost" />
          </protocols>
        </webServices>
      </system.web>
  • 相关阅读:
    [转载]memcached完全剖析--1. memcached的基础
    I/O多路复用
    How to install the zsh shell in Linux && how to set it as a default login shell
    深入理解计算机中的 csapp.h和csapp.c
    (一)网络编程基础之套接字入门
    crx
    t
    武汉第一例肺炎病例
    C语言 ## __VA_ARGS__ 宏
    NLP之中文分词cppjieba
  • 原文地址:https://www.cnblogs.com/Violety/p/13066248.html
Copyright © 2011-2022 走看看