1. 程式人生 > >Web服務下的非同步呼叫

Web服務下的非同步呼叫

通過非同步呼叫機制,可以提高程式的執行效率,同時,給使用者良好的介面體驗。

.net2.0下提供了很好的機制來支援Web服務的非同步呼叫。

下面通過一個例子來說明Web服務下怎樣實現非同步呼叫。

首先先建立一個Web服務專案

publicclass MyService : System.Web.Services.WebService
{
    
public MyService () {

        
//Uncomment the following line if using designed components 
        
//InitializeComponent(); 
    }


    [WebMethod]
    
publicstring HelloWorld() {
        
return"Hello World";
    }

    
}
 

然後再建立一個控制檯程式

新增Web Reference,會在Web Reference下生成一個localhost的Web Reference.

然後能過wsdl/namespace:MyService http://localhost/非同步呼叫/service.asmx?wsdl生成MyService代理類,然後新增到控制檯程式中。

using System;
using System.Collections.Generic;
using System.Text;
using MyService;

namespace AnsyDemo
{
    
class Program
    
{
        
staticbool MyStatus =false;
        
staticvoid Main(string[] args)
        
{
            System.Timers.Timer tr 
=new System.Timers.Timer();
            tr.Interval 
=1000;
            tr.Enabled 
=true;
            tr.Elapsed 
+=new System.Timers.ElapsedEventHandler(OnTimeEven);
            
//localhost.MyService MySeriveObj = new AnsyDemo.localhost.MyService();

            
//Console.WriteLine("開始呼叫遠端Web服務");

            
//開始非同步呼叫遠端服務

            MyService.MyService MyServiceObj 
=new MyService.MyService();
            Console.WriteLine(
"開始呼叫遠端Web服務");

            
//開始非同步呼叫遠端服務
            MyServiceObj.BeginHelloWorld(new AsyncCallback(MyHelloWord), MyServiceObj);

            
//int i = 0;
            
//while (Program.MyStatus != true)
            
//{
            
//    i++;
            
//    Console.WriteLine("等待Web服務呼叫結束....#" + i.ToString());
            
//}
            
//Console.WriteLine("遠端呼叫結束");
int j =0;
            
for (int i =1; i <100; i++)
            
{
                j 
+= i;
            }

            Console.WriteLine(j.ToString());
            Console.ReadLine();
           
        }


        
staticvoid MyHelloWord(IAsyncResult iar)
        
{
            MyService.MyService MyServices 
= (MyService.MyService)iar.AsyncState;
            Console.WriteLine(MyServices.EndHelloWorld(iar));
            
//結束遠端呼叫
            Program.MyStatus =true;
        }



        
privatestaticvoid OnTimeEven(object source, System.Timers.ElapsedEventArgs e)
        
{
            
if (MyStatus ==true)
            
{
                Console.WriteLine(
"呼叫結束");
            }


        }

    }

}

在這段程式中,定義了一個定時器,在一個固定的時間,來測試非同步呼叫是否完成。(當MyStatus=true時,非同步呼叫完成)

 MyService.MyService MyServiceObj =new MyService.MyService();
            Console.WriteLine(
"開始呼叫遠端Web服務");

            
//開始非同步呼叫遠端服務
            MyServiceObj.BeginHelloWorld(new AsyncCallback(MyHelloWord), MyServiceObj);

 這裡首先例項化Web服務,然後通過代理類myservice,來非同步呼叫方法HelloWorld,AsyncCallback是一個委託,當非同步呼叫完成時,它會自動呼叫MyHelloWrod方法。

我們通過MyHelloWrod方法,來呼叫EndHelloWrold方法,然後呼叫完成,設定MyStatus的狀態為true,當計時器再次檢測MyStatus時,為true,則非同步呼叫完成。

staticvoid MyHelloWord(IAsyncResult iar)
        
{
            MyService.MyService MyServices 
= (MyService.MyService)iar.AsyncState;
            Console.WriteLine(MyServices.EndHelloWorld(iar));
            
//結束遠端呼叫
            Program.MyStatus =true;
        }

相關推薦

Web服務非同步呼叫

通過非同步呼叫機制,可以提高程式的執行效率,同時,給使用者良好的介面體驗。 .net2.0下提供了很好的機制來支援Web服務的非同步呼叫。 下面通過一個例子來說明Web服務下怎樣實現非同步呼叫。 首先先建立一個Web服務專案 publicclass MyService : 

Anthem 非同步呼叫web服務

新增web服務應用 觸發事件: onclick="GetProductsList();" 客戶端js主體: function GetProductsList() { var maxamount = document.getElementBy

Nginx 在Windows搭建靜態Web服務

ima serve TCP/UDP load lis 服務 mage tor ext 簡介 nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic T

【linux】linux 環境 安裝禪道(轉載) -- 跟web服務器無關,無視apache、nginx!!!

sdn php 修改 鏈接 net 壓縮 操作 tps 數據庫 參考文章 鏈接 :https://blog.csdn.net/xinxin19881112/article/details/46813991 講的非常完美、透徹,不像其他的文章,都是抄襲的,沒一點註意事項和自己

server2016搭建web服務器&三種虛擬主機實驗文檔

服務器角色 訪問 要去 images www size html system 管理器 安裝web服務器 首先打開server2016的服務器管理器,點擊添加角色和功能如圖所示: 開始之前默認下一步如圖所示: 安裝類型默認下一步選擇基於角色或基於功能的安裝如圖所示:

server2016搭建web服務器&三種虛擬主機實驗

端口號 選擇 ado 實現 itl ice p地址 效果 info 搭建web服務器web服務器的搭建實現方式有如下三種:1、基於IP地址2、基於端口號(默認80端口,可修改)3、基於主機名(

服務優化之非同步呼叫

微服務優化之非同步呼叫 原文連結 前一節《微服務優化之並行》,主要從並行的角度來提高微服務的響應時間,本節講一下微服務優化之非同步呼叫。非同步的前提是對依賴的RPC介面呼叫,不需要關心其執行結果,對資料沒有強一致性要求,只要能夠達到最終一致性就好。 該種情況下,實現方式一般有兩種: 第一

linux設定web服務tomcat記憶體

  linux下設定web服務tomcat記憶體 一,java.lang.OutOfMemoryError: Java heap space  JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定.JVM在啟動的時候會自動設定Heap siz

釘釘機器人呼叫函式計算實現serverless web服務:傳統門禁的簡單改造,懶惰癌的福音

本文通過釘釘機器人呼叫函式計算實現的serverless web服務,打通物聯網平臺,和樹莓派實時通訊。實現了將原有傳統的磁吸門禁,改造成可以由釘釘來控制開門的簡單應用。 場景 由於本部門擁有獨立封閉的空間,在大門口配置了磁吸玻璃門,因此規定在工作期間出入需要隨手關門,以保證工作環境的私密性和安全性

webservice呼叫國內飛機航班時刻表 WEB 服務

昨天幫朋友寫的一個呼叫國內航班時刻表的測試程式,折騰了我好一會的時間,打算把它分享出來,共大家參考,其中wsdl:http://ws.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl 這個是介面文件:http://ws.webxml

linux系統開啟一個簡單的web服務

linux 下開啟一個簡單的web服務:   首先需要linux下安裝nodejs   然後建立一個test.js:   vi test.js var http =require("http"); function hello(req,res

nginx配置多個web服務

一、nginx簡介: Nginx("engine x")是一款是由俄羅斯的程式設計師Igor Sysoev所開發高效能的 Web和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品。 二、niginx預設conf配置檔

C# Web Service 不使用服務引用直接呼叫方法

using Microsoft.CSharp; using System; using System.CodeDom; using System.CodeDom.Compiler; using System.IO; using System.Net; using System.Text; usi

Dubbo剖析-服務消費端非同步呼叫

一、前言 前面我們講解的無論是正常呼叫還是泛化呼叫也好,都是進行同步呼叫的,也就是服務消費方發起一個遠端呼叫後,呼叫執行緒要被阻塞掛起,直到服務提供方返回。本節來講解下非同步呼叫,非同步呼叫是指服務消費方發起一個遠端呼叫後,不等服務提供方返回結果,呼叫方法就返回了,也就是當前執行緒不會被阻塞,這就允許呼叫方

Go語言:REST Web服務呼叫

Dynamsoft部署了基於REST的條形碼服務。這裡分享下如何使用Go語言傳送包含BASE64影象資料的HTTP POST請求。 環境配置 IDE: JetBrain Gogland.Go 1.7.4.Windows 10.工作目錄結構: <GOPATH>

在centos linux用django搭建web服務,提供api對句子進行情感分析

在centos linux下搭建web服務 這兩天因為實驗室和小米的專案需要我搭建一個web服務返回產品評論的情感極性概率,我一個伺服器小白只好從零摸索搭建伺服器,遇到了很多無從下手的問題,計算機真的令人崩潰2333,寫個部落格記錄一下。 使用到的工具:

Kubernetesweb服務的效能測試三部曲之三:橫向擴容

本章是《Kubernetes下web服務的效能測試三部曲》系列的終篇,之前我們用AB和JMeter兩種工具壓測了k8s環境下的Tomcat,並通過調整記憶體和CPU來驗證縱向擴容的效果,本章我們來驗證橫向擴容對吞吐量的影響; 本文地址:http://blog.

linux搭建基本web服務

服務端配置:1.安裝一個可以提供Web功能軟體[[email protected] ~]# yum -y install httpd2.啟動httpd服務[[email protected] ~]# systemctl restart httpd[[ema

Altova XMLSpy軟體測試使用soap遠端呼叫web服務

1:點選SOAP(O)下的建立新的soap請求 2:選擇本地的.wsdl檔案或者 遠端的web服務 3:設定傳送資訊    將所要傳送的xml檔案配置      將       <![CDATA[     所要傳送的xml引數          ]]>  代

Ajax程式:處理非同步呼叫中的異常(在客戶端呼叫Web Service代理時發生異常的處理辦法)

一個好的Web應用程式,強大的異常處理是少不了的。最近在學習Ajax的過程中,我總結了幾種不同情況下的處理非同步呼叫中異常的不同辦法;想分享給大家; 1,在客戶端呼叫Web Service代理時發生異