c#調用WebAPI和WebService的方法

1.調用WebAPI

方法1.多個參數

 /// <summary>
        /// 使用POST方式發送json字符串請求結果
        /// </summary>
        /// <param name="url">url地址</param>
        /// <param name="postData">需要發送的json字符串</param>
        /// <returns></returns>
        public static string PostUrl1(int cmd, string url, string postData, string postData1)
        {
            string mturl = "";
            string result = "";
           // var request = (HttpWebRequest)WebRequest.Create(url);
            switch (cmd)
            {
                case 1:
                    
                    string param = HttpUtility.UrlEncode("CheckInfo") + "=" + HttpUtility.UrlEncode(postData);
                    byte[] bytes = Encoding.UTF8.GetBytes(param);

                    var request = (HttpWebRequest)WebRequest.Create(url + "/" + "CheckRoute");
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = bytes.Length;
                    int length = bytes.Length;
                    request.ContentLength = length;
                    Stream writer = request.GetRequestStream();
                    writer.Write(bytes, 0, length);
                    writer.Close();
                    var response = (HttpWebResponse)request.GetResponse();
                    //var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
                    //result = responseString.ToString();

                    Stream stream = response.GetResponseStream();        //獲取響應流
                    XmlTextReader Reader = new XmlTextReader(stream);
                    Reader.MoveToContent();
                    result = Reader.ReadInnerXml();

                    break;
                case 2:

                    string param1 = HttpUtility.UrlEncode("TestResult") + "=" + HttpUtility.UrlEncode(postData) + "&" + HttpUtility.UrlEncode("ItemResult") + "=" + HttpUtility.UrlEncode(postData1);
                   
                    byte[] bytes1 = Encoding.UTF8.GetBytes(param1);

                    var request1 = (HttpWebRequest)WebRequest.Create(url + "/" + "TestResultUpload");
                    request1.Method = "POST";
                    request1.ContentType = "application/x-www-form-urlencoded";
                    request1.ContentLength = bytes1.Length;
                    int length1 = bytes1.Length;
                    request1.ContentLength = length1;
                    Stream writer1 = request1.GetRequestStream();
                    writer1.Write(bytes1, 0, length1);
                    writer1.Close();
                    var response1 = (HttpWebResponse)request1.GetResponse();
                    //var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
                    //result = responseString.ToString();

                    Stream stream1 = response1.GetResponseStream();        //獲取響應流
                    XmlTextReader Reader1 = new XmlTextReader(stream1);
                    Reader1.MoveToContent();
                    result = Reader1.ReadInnerXml();
                    break;
            }

            //MessageBox.Show(responseString.ToString());
            return result;
        }

方法2.

        /// <summary>
        /// 使用POST方式發送json字符串請求結果
        /// </summary>
        /// <param name="url">url地址</param>
        /// <param name="postData">需要發送的json字符串</param>
        /// <returns></returns>
        public static string PostUrl1(int cmd,string url, string postData)
        {
            string mturl = "";
            string result = "";
            switch (cmd)
            {
                case 1:
                    mturl = url + "/checkworkstation";
                    break;
                case 2:
                    mturl = url + "/savetestresult";
                    break;
            }

  
            //json參數

            var request = (HttpWebRequest)WebRequest.Create(mturl);
            request.Method = "POST";
            request.ContentType = "application/json";
            byte[] byteData = Encoding.UTF8.GetBytes(postData);
            int length = byteData.Length;
            request.ContentLength = length;
            Stream writer = request.GetRequestStream();
            writer.Write(byteData, 0, length);
            writer.Close();
            var response = (HttpWebResponse)request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
            result = responseString.ToString();
            //MessageBox.Show(responseString.ToString());

            return result;
        }

2.調用Webervice

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Web.Services.Description;
using System.CodeDom;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
 
namespace WT
{
    class WebServiceHelper
    {
        /// <summary<
        /// 實例化WebServices
        /// </summary<
        /// <param name="url"<WebServices地址</param<
        /// <param name="methodname"<調用的方法</param<
        /// <param name="args"<把webservices裏需要的參數按順序放到這個object[]裏</param<
        public static object InvokeWebService(string url, string methodname, object[] args)
        {

            //這裏的namespace是需引用的webservices的命名空間,在這裏是寫死的,大家可以加一個參數從外面傳進來。
            //string @namespace = "WebServiceTest";
            string @namespace = "dsf";
            try
            {
                //獲取WSDL
                WebClient wc = new WebClient();
                Stream stream = wc.OpenRead(url + "?WSDL");
                ServiceDescription sd = ServiceDescription.Read(stream);
                string classname = sd.Services[0].Name;
                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace cn = new CodeNamespace(@namespace);

                //生成客戶端代理類代碼
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                CSharpCodeProvider csc = new CSharpCodeProvider();
                ICodeCompiler icc = csc.CreateCompiler();

                //設定編譯參數
                CompilerParameters cplist = new CompilerParameters();
                cplist.GenerateExecutable = false;
                cplist.GenerateInMemory = true;
                cplist.ReferencedAssemblies.Add("System.dll");
                cplist.ReferencedAssemblies.Add("System.XML.dll");
                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                cplist.ReferencedAssemblies.Add("System.Data.dll");

                //編譯代理類
                CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }

                //生成代理實例,並調用方法
                System.Reflection.Assembly assembly = cr.CompiledAssembly;
                Type t = assembly.GetType(@namespace + "." + classname, true, true);
                object obj = Activator.CreateInstance(t);
                System.Reflection.MethodInfo mi = t.GetMethod(methodname);

                return mi.Invoke(obj, args);
            }
            catch
            {
                return null;
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章