根據反射,動態調用websever

来源:https://www.cnblogs.com/jkping/archive/2020/07/17/13332080.html
-Advertisement-
Play Games

[WebMethod] public string index(string Action,string Message) { try { // 1. 使用 WebClient 下載 WSDL 信息。 WebClient web = new WebClient(); Stream stream = ...


 [WebMethod]
        public string index(string Action,string Message)
        {

            try
            {
                // 1. 使用 WebClient 下載 WSDL 信息。
                WebClient web = new WebClient();
                Stream stream = web.OpenRead("http://localhost/test/WebService.asmx?WSDL");
                // 2. 創建和格式化 WSDL 文檔。
                ServiceDescription description = ServiceDescription.Read(stream);

                // 3. 創建客戶端代理代理類。
                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

                importer.ProtocolName = "Soap"; // 指定訪問協議。
                importer.Style = ServiceDescriptionImportStyle.Client; // 生成客戶端代理。
                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

                importer.AddServiceDescription(description, null, null); // 添加 WSDL 文檔。

                // 4. 使用 CodeDom 編譯客戶端代理類。
                CodeNamespace nmspace = new CodeNamespace(); // 為代理類添加命名空間,預設為全局空間。
                CodeCompileUnit unit = new CodeCompileUnit();
                unit.Namespaces.Add(nmspace);

                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

                CompilerParameters parameter = new CompilerParameters();
                parameter.GenerateExecutable = false;
                parameter.GenerateInMemory = true;
                parameter.ReferencedAssemblies.Add("System.dll");
                parameter.ReferencedAssemblies.Add("System.XML.dll");
                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
                parameter.ReferencedAssemblies.Add("System.Data.dll");

                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);

                // 5. 使用 Reflection 調用 WebService。
                if (!result.Errors.HasErrors)
                {
                    Assembly asm = result.CompiledAssembly;
                    //搜索類名 如果在前面為代理類添加了命名空間,此處需要將命名空間添加到類型前面。
                    Type t = asm.GetType("WebService"); 
                    object o = Activator.CreateInstance(t);
                    //搜索類下函數
                    MethodInfo method = t.GetMethod("test");//HIPMessageServer
                    object[] l_args = new object[2] { Action, Message };
                    //調用函數
                    return method.Invoke(o, l_args).ToString();
                    
                }
                return "{code:2,msg:'錯誤'}";
            }
            catch (Exception e)
            {

                return "{code:1,msg:'"+e.ToString()+"'}";
            }
        }

   //被調用的介面

 

[WebMethod]
public string test(string Action, string Message) {
return Action + Message;
}

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 條件語句 Go的條件語句和其它語言類似,主要是不支持三目運算符所以?:這種條件判斷是不支持的。Go提供的條件判斷語句主要有 if 還有 switch這兩種形式下麵是 if條件語句 if的幾種寫法,基本上和其它語言是一致的 if 條件 { } else { } if 條件 { } else if 條件 ...
  • 上次我們說到 微服務架構的前世今生(七):微服務架構生態體系 ,這次我們在說說微服務架構的技術支持。作者 哈嘍沃德先生,歡迎關註。 一、Spring Cloud Spring Cloud Netflix Eureka:服務註冊中心。 Spring Cloud Zookeeper:服務註冊中心。 Sp ...
  • 讀寫鎖實現邏輯相對比較複雜,但是卻是一個經常使用到的功能,希望將我對ReentrantReadWriteLock的源碼的理解記錄下來,可以對大家有幫助 前提條件 在理解ReentrantReadWriteLock時需要具備一些基本的知識 理解AQS的實現原理 之前有寫過一篇《深入淺出AQS源碼解析》 ...
  • 警告消息框主要是用來向用戶戶展示諸如警告、異常、完成和提示消息。一般實現的效果就是從系統視窗右下角彈出,然後加上些簡單的顯示和消失的動畫。 ###創建警告框視窗 首先我們創建一個警告框視窗(Form),將視窗設置為無邊框(FormBoderStyle=None),添加上圖片和內容顯示控制項 創建好警告 ...
  • 本系列將和大家分享面向對象23種設計模式中常用的幾種設計模式,本章主要簡單介紹下結構型設計模式。 ...
  • 前言 在C#中提供了一些關鍵字if、else、switch、for等,這些關鍵字為我們提供了應用程式的流程式控制制。後面幾個章節我們將看到的是流程式控制制在IL中的實現。 static void Main(string[] args) { var a = 1; if (a == 0) { Console.W ...
  • .cs: 類模塊代碼文件。業務邏輯處理層的代碼。 .sln:解決方案文件,為解決方案資源管理器提供顯示管理文件的圖形介面所需的信息。 .csproj:項目文件,創建應用程式所需的引用、數據連接、文件夾和文件的信息。 .aspx:動態網頁尾碼(拓展:jsp,php)。(靜態網頁尾碼,如:html,sh ...
  • 《ASP.NET Core 開發實戰》 [作者] (意) Dino Esposito[譯者] (中) 趙利通[出版] 清華大學出版社[版次] 2019年07月 第1版[印次] 2019年12月 第2次 印刷[定價] 79.80元 【前言】 (PVI) ASP.NET Core 是 ASP.NET 開 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...