zoukankan      html  css  js  c++  java
  • ASP.NET中的WebService

          WebService:一个完成客户端与服务器端通信的技术?一个完成将SOAP映射为.NET类的技术?或者更简单的认为是XML文档信息传递的技术?也许在刚接触到这个的时候我们并不知道WebService究竟意味着什么,反正只知道他是通过建立一个ASP.NET Web 服务而产生了一个*.asmx文件,伴随着这个文件的还有一个是与其同名的*.cs文件(VS2005是在AppCode文件夹下面)。

         竟然我们不知道WebService有啥作用,就不用管他了,我们现在想用ASP建立一个页面,两个文本框TextBox(一个用来Input,一个用来Output),一个Button,在Input中我们输入一个名字,然后在Output中我们打印出相应的信息,这个很容易,需要一个Web页面,后台的处理代码(简单的功能用JS,复杂的功能放在后台实现),这样很容易就实现了当点击按钮的时候就打印出了信息。这个功能太容易了,但是我们就像将它共享出来,让别人也能使用,现在有个其他的开发商,他习惯开发桌面应用程序,他也想使用别人的共享的函数接口,他希望之前开发WEB的供应商把这个打印信息的功能也让他们使用一下。为了满足这个要求我们有了以下的认识:①省掉Web页面,桌面应用程序可不需要什么结果页面。②应用程序之间的集成,不同系统不同语言下的应用程序使用同一个接口。好了,这个时候我们可能在考虑怎么实现这样的功能,去网上搜索半天感觉WebService可以实现类似的功能,可是我们不知道什么是WebService,于是就看看CSDN或是MSDN上提供的一些案例,看来感觉也没什么太深奥的东西,直接就开始建个项目,开始自己的第一个WebService项目。

          VS2005—>创建网站—>ASP.NET Web 服务,在位置处写上http://localhost/webserver,完成创建,看到AppCode下有个Service.cs文件,看到的是一个标注了属性[WebMethod]的一个HelloWorld函数,这个我们先屏蔽掉,然后自己写一个打印信息的方法:

     [WebMethod]
     
    public string PrintName(string name)
     {
        
    return "我输入的名字是:" + name;
     }

         先运行看看,可以看到一个主页面有个PrintName的链接,点击一下,可以看到一个输入框,输入名字,点击Invoke,可以看到XML文档:

    <?xml version="1.0" encoding="utf-8" ?>  <string xmlns=http://localhost/webserver/>我输入的名字是:wy</string> 

         现在函数是写好了,那如何让其他引用程序调用呢?记得应用程序中一些封装的方法都是编译成DLL文件然后共享使用,这里也可以试试,可是发现VS05中WebService不能自动生成DLL文件,只好自己编译了。

         ①打开VS05的命令行,首先需要把.asmx文件映射为.cs文件:

           WSDL http://ip/地址//项目名称/*.asmx /n: 命名空间 /out 输入文件名.cs(这里我们用PrintName.cs)

         ②编译成DLL

           csc /t:library /r:system.web.dll /r:system.xml.dll PrintName.cs

         经过上面两步,就可以在VS05的VC目录下生成一个PrintName.cs文件和一个PrintName.dll文件,那这样我们就可以在应用程序中调用这个DLL了。

         (1)应用程序调用:新建一个应用程序,将PrintName.dll添加到引用中去。运行效果:

       

         private NameSp.Service client;
         
    private void btnInvoke_Click(object sender, EventArgs e)
         {
            client 
    = new Service();
            
    string output;
            output 
    = client.PrintName(this.textBox2.Text.ToString());
            
    this.textBox1.Text = output;
         }

          (2)Web程序调用:新建一个网站,也同样添加PrintName.dll,接着新建一个页面,代码和在上面的代码完全一样,效果也是一样的。

            对照着程序再去理解WebService就会容易多了。记得在上面提到了SOAP,那SOAP又是什么呢?在运行一开始建立的Web 服务是有没有注意网页中列出的下面一段XML文档

    //请求
    POST /webserver/Service.asmx HTTP/1.1
    Host: localhost
    Content
    -Type: text/xml; charset=utf-8
    Content
    -Length: length
    SOAPAction: 
    "http://localhost/webserver/PrintName"

    <?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>
        
    <PrintName xmlns="http://localhost/webserver/">
          
    <name>string</name//参数
        
    </PrintName>
      
    </soap:Body>
    </soap:Envelope>
    //回答
    HTTP/1.1 200 OK
    Content
    -Type: text/xml; charset=utf-8
    Content
    -Length: length

    <?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>
        
    <PrintNameResponse xmlns="http://localhost/webserver/">
          
    <PrintNameResult>string</PrintNameResult>
        
    </PrintNameResponse>
      
    </soap:Body>
    </soap:Envelope>

         上面作为请求,下面作为回答,在请求中可以看到PrintName真是函数的方法名,在回答中对应着PrintNameResult.感觉SOAP应该就是XML文档,他将.cs文件中的标有[WebMethod]属性的方法转变为了XML文档,而在调用中又转换为类操作对象。WebService就是完成SOAP到.NET类之间的映射。

         只是简单的根据自己理解的记录了下来,继续学习不断完善!

  • 相关阅读:
    数论:扩展欧几里得算法
    数论:四大定理
    数论:完全数
    数论:求解不定方程和同余方程的实验范例
    Python记:列表和元组之序列相加
    动态规划入门:热血实战!
    Python记通用列表操作之切片!
    Python记:索引操作示例:将以数指定年,月,日的日期打印出来
    计算机的性能指标
    动态规划入门(2):01背包问题实践
  • 原文地址:https://www.cnblogs.com/wangyong/p/2030803.html
Copyright © 2011-2022 走看看