WebService

基础知识

      发展进程:1.在Visual Studio 2005里提供的Add Web Reference(添加Web服务引用),用于添加Web Services引用

                    2.在Visual Studio 2008保留Add Web Reference(添加Web服务引用),是为了版本向前兼容。基于.NET Framework 2.0。

                    3.Visual Studio 2008在升级以后为了对.NET Framework 3.0 或 3.5版本上WCF Service Library的支持。增加了Add Service Reference(添加服务引用)功能。Framework3.0 或 3.5 时可用。

     

      Add Web Reference(添加Web服务引用)和Add Service Reference(添加服务引用)联系和区别

            联系:主要添加引用都有一个获取服务元数据,反序列话本地类文件的过程。这个结构也基本类似。都包含wsdl\discovery等文件。

           区别:Add Web Reference 生成的 Reference.cs文件里,包含一个服务代理类,他负责与Web服务通信,它继承一个Soap类,使用SOAP协议,SOAP简单对象访问协议,基于XML语言。此外还包含一些Web服务类里定义的方法,和与之相关的异步调用方法和事件。遵守.NET Web Service 的主要规则。

                  Add Service Reference生成的客户端文件 Reference.cs。我看了一下,这个也会反序列化一个本地代理类,很相似和前者。不过除了服务类和其相关的一些别的类和契约接口。其中比较重要就是一个契约和一个通信管道。这个主要和WCF框架
 的编程模型和反序列话机制有关系。因为WCF 强调的是 契约的概念,还有就是绑定协议,这个就直接决定了客户端和服务端通信的通道类型。你在这个文件里也能看到。此外还有服务请求和相应对应的信息。遵循WCF服务框架的规则。

 

   下面是写的例子。可以查看Add Web Reference(添加Web服务引用)和Add Service Reference(添加服务引用)实现的区别:

    1.创建一个Web Servcies程序

[WebService(Namespace = "http://127.0.0.1:8771/")]   //为发布Webservices发布虚拟目录所在的域名
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class Webserver01 : System.Web.Services.WebService
    {

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

        /// <summary>
        /// 根据学生名称得到该学生的成绩
        /// </summary>
        /// <param name="name"></param>
        /// <param name="intsecond"></param>
        /// <returns></returns>
        [WebMethod]
        public int GetGrades(string name, int intsecond)
        {
            if (intsecond > 0)
            {
                Thread.Sleep(intsecond * 1000); 
            }

            int intGrade = 0;

            switch (name)
            { 
                case "小白":

                    intGrade = 90;

                    break;

                case "小黑":

                    intGrade = 70;

                    break;

                case "小红":

                    intGrade = 60;

                    break;
               
                default:

                    intGrade = 0;

                    break;
            }

            return intGrade;
        }

    }

  

        2 创建一个调用的控制台程序    Add Web Reference(添加Web服务引用),同步调用

class Program
    {
        static void Main(string[] args)
        {
            WebServer.Webserver01 webServer = new WebServer.Webserver01();

            Console.WriteLine("请输入要查询成绩的学生的姓名:");

            string strName = Console.ReadLine();

            Console.WriteLine("请输入要延迟的秒数:");

            int intSecond = int.Parse(Console.ReadLine());

            Console.WriteLine("同步调用开始");


            Console.WriteLine("同步调用结果为:" + webServer.GetGrades(strName, intSecond));
            Console.WriteLine("同步调用结束");

            Console.ReadLine();




        }
    }

  

       创建一个调用的控制台程序 Add Service Reference(添加服务引用),同步调用

class Program
    {
        static void Main(string[] args)
        {

            ServiceReference1.Webserver01SoapClient web = new ServiceReference1.Webserver01SoapClient();

            Console.WriteLine("请输入要查询成绩的学生的姓名:");

            string strName = Console.ReadLine();

            Console.WriteLine("请输入要延迟的秒数:");

            int intSecond = int.Parse(Console.ReadLine());      
 
            Console.WriteLine("同步调用开始");

            Console.WriteLine("同步调用结果为:" + web.GetGrades(strName, intSecond));
Console.WriteLine("同步调用结束");    Console.ReadLine(); } }

  同步调用的结果:

 

 异步调用:Add Web Reference(添加Web服务引用),同步调用

 

  /// <summary>
    /// 基于任务的异步操作
    /// 异步调用客户端
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {

            localhost.Webserver01 web = new localhost.Webserver01();

            Console.WriteLine("请输入要查询成绩的学生姓名:");

            string strName = Console.ReadLine();

            Console.WriteLine("请输入要延迟的秒数:");

            int intsecond = int.Parse(Console.ReadLine());
            

            Console.WriteLine("异步调用开始");

            web.GetGradesCompleted += new localhost.GetGradesCompletedEventHandler(service_Completed);

            web.GetGradesAsync(strName, intsecond);//开始异步调用


            Console.WriteLine("当前进程没有被阻塞");

            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine(i);
            }

            Console.ReadLine();


        }

        private static void service_Completed(object sender, localhost.GetGradesCompletedEventArgs e)
        {
            Console.WriteLine("异步调用的结果为:" + e.Result);

            Console.WriteLine("异步调用结束");
        }



    }

  

 异步调用的结果:

 

转载于:https://www.cnblogs.com/shikangjie/p/5678843.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值