zoukankan      html  css  js  c++  java
  • C#后台HttpWebRequest代码调用WebService

    一、创建一个webservices服务

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    
    namespace WeServices
    {
        /// <summary>
        /// MyWebService 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
        // [System.Web.Script.Services.ScriptService]
        public class MyWebService : System.Web.Services.WebService
        {
    
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
    
            [WebMethod]
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }

     点击运行然后浏览器输入地址:

     然后点击Add方法 我们就能查看到当前webservice调用时需要的参数

     二、根据上面的调用分析我们可以在代码中进行调用

    using System;
    using System.Collections;
    using System.IO;
    using System.Net;
    using System.Net.Http;
    using System.Text;
    using System.Xml;
    
    namespace WebTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                string url = "http://localhost:5898/MyWebService.asmx";
                string par = "<?xml version="1.0" encoding="utf-8"?>"+
                                "<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">"+
                                  "<soap:Body>"+
                                    "<Add xmlns="http://tempuri.org/">"+
                                      "<a>10</a>"+
                                      "<b>20</b>"+
                                    "</Add>"+
                                  "</soap:Body>"+
                                "</soap:Envelope>";
                string result = GetService(url, par);
                Console.WriteLine(result);
                Console.ReadKey();
            }
    
            public static string Get(string url, string par)
            {
                string res = "";
                HttpClient client = new HttpClient();
                HttpContent httpContent = new StringContent(par);
                httpContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("Content-Type","text/xml; charset=utf-8"));
                res = client.PostAsync(url, httpContent).Result.Content.ReadAsStringAsync().Result;
                return res;
            }
    
            public static string GetService(string url, string par)
            {
                string res = "";
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse webResponse = null;
                Stream writer = null;
                Stream reader = null;
                byte[] data = Encoding.UTF8.GetBytes(par);
                webRequest.Method = "POST";
                webRequest.ContentType = "text/xml; charset=utf-8";
                webRequest.ContentLength = data.Length;
    
                //写入参数
                try
                {
                    writer = webRequest.GetRequestStream();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                writer.Write(data, 0, data.Length);
                writer.Close();
    
                //获取响应
                try
                {
                    webResponse = (HttpWebResponse)webRequest.GetResponse();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                reader = webResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(reader, Encoding.UTF8);
                res = streamReader.ReadToEnd();
                reader.Close();
                streamReader.Close();
                XmlDocument document = new XmlDocument();
                document.LoadXml(res);
                res = document.GetElementsByTagName("AddResult").Item(0).InnerText;
                return res;
            }
        }
    }

    这样就能直接获取到接口返回的值了,webservice接口调用还是很简单的,浏览器中给出的调用文档很详细,根据文档我们就能很顺利的进行代码调用。

    当然我们也能在项目中直接引入该服务,获取该webservice的wsdl文件然后引入到项目中,直接实例化服务对象,像方法一样进行调用,这里我就不演示此种方法了,就和引入一个动态库一样 只不过这里是引用服务而已,其他的使用和C#方法调用一样。

  • 相关阅读:
    VMWare的The network bridge on device VMnet0 is not running故障解决
    函数索引 ORA30553: The function is not deterministic 解决方法
    Oracle 9i EXP XDB.DBMS_XDBUTIL_INT must be declared
    Event 10053 执行计划 绑定变量 Bind peeking
    Oracle Data Guard 理论知识
    Oracle 9i ORA04062 timestamp of package SYS DBMS_SNAPSHOT_UTL has been changed ORA06512 at SYS DBMS_SNAPSHOT
    Oracle Data Guard Linux 平台 Logical Standby 创建实例
    Oracle RAC 归档 与 非归档 切换
    Oracle 9i EXP XDB.DBMS_XDBUTIL_INT must be declared
    ORA16014: log string sequence# string not archived, no available destinations Flash Recovery Area 空间不足
  • 原文地址:https://www.cnblogs.com/yuanshuang-club/p/15238341.html
Copyright © 2011-2022 走看看