• WebService基本配置与使用


    Web service是一个基于可编程的web的应用程序,用于开发分布式的互操作的应用程序,也是一种web服务

    WebService的特性有以下几点:

    1.使用XML(标准通用标记语言)来作为数据交互的格式。

    2.跨平台性,因为使用XML所以只要本地应用可以连接网络解析XML就可以实现数据交换,比如安卓、IOS、WindowsPhone等都可以实现对Web service的数据交互。

    3.基于HTTP协议,直接跨越防火墙,通用型强;

    下面使用Visual Studio 2013(其他VS版本亦是如此)来创建一个简单Web service服务。

    一、打开Visual Studio->文件->新建->网站

    二、之后选择ASP.NET空网站,再点击“确定”

    三、新建网站后你会看到解决方案管理器中看到一个web.config,待会我们可以通过配置这个文件来实现浏览器对WebService的远程调用。现在,右键解决方案中的项目名添加一个WebService项目。

    四、之后,你可以在项目模版中找到Web服务(ASMX),添加

    五、创建之后在APP_Code文件夹中创建一个WebService.cs文件

    在网站根目录下会同时创建一个WebService.asmx文件

    这两个文件中WebService.cs负责逻辑部分,WebService.asmx提供服务部分。将来引用WebService服务时将直接引用WebService.asmx文件来调用WebService服务,服务的执行部分就是WebService.cs文件

    现在打开WebService.cs文件来编辑逻辑部分实行一个简单的《客户端调用web服务实现一个简单的加法运算,并返回以字符串给客户端运算结果》

    复制代码
     1 /*
     2    Web.Services.cs文件
     3 */
     4 using System;
     5 using System.Collections.Generic;
     6 using System.Linq;
     7 using System.Web;
     8 using System.Web.Services;
     9 
    10 /// <summary>
    11 /// WebService 的摘要说明
    12 /// </summary>
    13 [WebService(Namespace = "http://tempuri.org/")]
    14 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    15 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    16 // [System.Web.Script.Services.ScriptService]
    17 public class WebService : System.Web.Services.WebService {
    18 
    19     public WebService () {
    20 
    21         //如果使用设计的组件,请取消注释以下行 
    22         //InitializeComponent(); 
    23     }
    24 
    25     /// <summary>
    26     /// 方法上头的[WebMethod]是声明一个web服务方法,如果你想写个方法能让客户端调用并返回结果就必须在方法上头标注[WebMethod]
    27     /// 如果是只负责逻辑运算或私有方法,并不打算给客户端结果,只给类方法内部调用就无需声明[WebMethod]
    28     /// </summary>
    29     /// <param name="a"></param>
    30     /// <param name="b"></param>
    31     /// <returns>将运算结果转换成字符串返回</returns>
    32     [WebMethod]
    33     public string HelloWorld(int a, int b) {
    34         int result = a + b;
    35         return result.ToString();
    36     }    
    37 }
    复制代码

     上面的代码写了一个基本的方法供远程调用,将cs文件保存后,一个简单的web服务就创建了!

    下面我们启动这个项目,用浏览器查看微软为我们定义测试的调用页面:

    在这里我们可以看到我们写的Hello方法可以调用了,我们单击进入这个方法进入调用调试页面:

    输入参数,我们写的是一个简单的加法运算,参数便是我们写的HelloWorld方法的参数a和b,我们输入两个整数点击调用,出现如下结果:

    下面是web服务返回的结果,其中133就是HelloWorld参数a+b返回的结果:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <string xmlns="http://tempuri.org/">133</string>

     到这里,以后我们想要调用一个web服务就可以通过以上方式把客户端从服务器获取数据,访问:"主机名/web服务名.asmx"就可以调用了。

    得到的数据是个XML,所以客户端得到数据后需要客户端解析XML文件。

    注意:以上创建在浏览器调用的web服务仅供本地计算机调试使用,需要配置web.config(之前提到过)才能实现远程调用调试

    如果不配置,在远程调用会出现:测试窗体只能用于来自本地计算机的请求解决 的问题。

    如需远程调用可以参考一下方法:

    在网站的解决方案的下方找到web.config

    打开后添加如下配置即可:

    复制代码
    1 <system.web>  
    2     <webServices>  
    3       <protocols>  
    4         <add name="HttpGet"/>  
    5         <add name="HttpPost"/>  
    6       </protocols>  
    7     </webServices>    
    8 <system.web>
    复制代码

     配置之后,就可以在远程通过浏览器来调用webservice.asmx服务了,开发测试之后,为了安全,一定把该配置去掉!

    WebService,即Web服务,能使得运行在不同机器上的不同应用无须借助,专门的第三方软件或硬件,就可相互交换数据或集成.

       第一次选择WebService,是为了替代数据库远程连接.我们都知道当SQL允许远程时,则要打开某一端口.但这一点在我们已经部署好的服务器上,却是不被允许的,于是就选择WebService来代替了.当然现在我们也可以选择WCF来完成.不过这不是我们今天的主题.

       WebService返回的数据为XML,这是我们都很熟悉的一种数据方式,大大方便了我们的工作当然,WebService给我们带来的好处远不止这些.我不想讲得更多.相信当你能够熟练运用WebService后,你会发现这是一把锋利的宝刃.

       对于初次接触WebServcie的人来说,长篇理论,不如一个实例来得更实际些,我们更看重的是到底如何能够创建一个WebService并且将其部署,和使用.

       下面我将逐步的完成一个加减乘除功能的WebServic.

       开发环境:VS2012

       IIS环境:WINSERVER2008R2 IIS7.5

       第一步:打开VS2012,新建空项目,注意选择.NET Framework的版本.这里我选择的是.NET Framework 4

        

      新建好项目后,在项目中添加一个WebService项

    打开这个文件,我们可以看到,代码如下

    [csharp] view plain copy
     
     print?
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Web;  
    5. using System.Web.Services;  
    6.   
    7. namespace CalculateService  
    8. {  
    9.     /// <summary>  
    10.     /// WebService1 的摘要说明  
    11.     /// </summary>  
    12.       
    13.   
    14.     [WebService(Namespace = "http://tempuri.org/")]  
    15.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    16.     [System.ComponentModel.ToolboxItem(false)]  
    17.     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。   
    18.     // [System.Web.Script.Services.ScriptService]  
    19.     public class CalCulService : System.Web.Services.WebService  
    20.     {  
    21.   
    22.         [WebMethod]  
    23.         public string HelloWorld()  
    24.         {  
    25.             return "Hello World";  
    26.         }  
    27.     }  
    28. }  


    将HellowWorld这段代码删除,修改后如下

    [csharp] view plain copy
     
     print?
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Web;  
    5. using System.Web.Services;  
    6.   
    7. namespace CalculateService  
    8. {  
    9.     /// <summary>  
    10.     /// CalCulService 的摘要说明  
    11.     /// </summary>  
    12.     [WebService(Namespace = "http://login.wxjy.info")]  
    13.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    14.     [System.ComponentModel.ToolboxItem(false)]  
    15.     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。   
    16.     // [System.Web.Script.Services.ScriptService]  
    17.     public class CalCulService : System.Web.Services.WebService  
    18.     {        
    19.         [WebMethod]  
    20.         public int Sum(int a, int b)  
    21.         {  
    22.             return a + b;  
    23.         }  
    24.   
    25.         [WebMethod]  
    26.         public int Sub(int a, int b)  
    27.         {  
    28.             return a - b;  
    29.         }  
    30.   
    31.         [WebMethod]  
    32.         public double Mult(double a, double b)  
    33.         {  
    34.             return a * b;  
    35.         }  
    36.   
    37.         [WebMethod]  
    38.         public double Div(double a, double b)  
    39.         {  
    40.             return a / b;  
    41.         }  
    42.     }  
    43. }  


    此时,我们已经完成这个WebService的代码部分.接下来我们要将这个WebService打包发布

    在项目上点击右键,点击菜单中的发布

     此时出现如下页面

    点击下拉菜单选择新建配置文件

    完成以上步骤后,我们可以在设置文件生成的文件夹内看到生成的以下文件

    现在我们要将生成的文件拷贝到已经部署好的IIS服务器上:在服务器上新建文件夹,将文件拷贝至文件夹内,并且为文件夹设置匿名权限.

    现在我们在IIS中添加网站

    需要注意的是:我们的这个WebService是基于.NET 4开发的.如果你的IIS默认使用的是.NET 2.0,那么发布后将会出现异常,而无法访问.

    查看一下应用程序池的右边的应用程序池默认设置

    提供两种解决方案:第一种,在上面的表格中,将应用程序池默认改为4.0即可.当然这是指你的IIS中没有需要2.0的应用程序和网站.

    如果你的IIS中还有其它的需要.NET 2.0的应用程序,这时候你可以选择第二个办法

    首先添加一个应用程序池

    然后添加网站,将网站的应用程序池改为新建的应用程序池

    当然,我们也可以将这个项目的.NET版本改为3.5,然后重新打包发布.那么就不需要添加对4.0的支持了.

    添加完毕,启动网站,此时可以关闭与服务器的连接了.

    在本地的浏览器中输入地址

    http://xxx.xxx.com/calculservice.asmx

    此时我们可以看到以下的界面

    此时我们已经完成了这个WebService的创建和部署.接下来,我们要在本地使用它

    打开VS2012,新建项目,项目名为TestCalCul

    在项目中添加新建项

    在项目中引用项上点击右键,选择添加服务引用,显示界面如下:

    点击左下角的高级,出现界面如下

    点击添加Web引用,出现界面如下

    在URL中输入我们发布的WebService的URL地址,系统会自动搜索到服务.并且为Web引用设置一个引用名.此引用名将是我们在项目中引用这个服务的命名空间

    点击添加引用,引用完成.

    接下来,我们在WebForm1的cs文件中写如下代码


     

    [csharp] view plain copy
     
     print?
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Web;  
    5. using System.Web.UI;  
    6. using System.Web.UI.WebControls;  
    7.   
    8. //不要忘记为WebService添加using引用  
    9. using TestCalCul.MyWebService;  
    10.   
    11. namespace TestCalCul  
    12. {  
    13.     public partial class WebForm1 : System.Web.UI.Page  
    14.     {  
    15.         protected void Page_Load(object sender, EventArgs e)  
    16.         {  
    17.             CalCulService cal = new CalCulService();  
    18.             double a = 29755;  
    19.             double b = 112.58;  
    20.             Response.Write(cal.Mult(a, b).ToString());  
    21.         }  
    22.     }  
    23. }  
     


    接下来,在浏览器中运行该项目.可以看到如下结果

    此时我们已经完成了这个WebService的使用过程

    其实,这个实例在开发中,没有任何意义.

    但是通过这个实例,我们可以看出WebService的复用性,简单性是非常好的.

    在VS的环境下,我们可以轻易完成一个WebService的开发过程.

    而WebService返回给我们的XML数据方式,也可以充分的和JavaScript等任何一种可以处理XML的语言相结合来

    完成我们的需求.

    在这里要注意,当WebService连接数据库时,我们要适当的给WebService进行加密.

    加密的方式很多,你可以通过在IIS服务器上禁止匿名访问来实现,也可以给WebService的验证增加验证内容,最

    简单的就是加上用户名和密码.

    还要注意,不要用有含义的方法名称,比如Login或者PayOrder等,回传数据不要使用bool值,尽量使用字符串来替

    代,最好在字符串中加上干扰码等.

  • 相关阅读:
    caffe BUG
    Ubuntu安装低版本gcc
    OpenCV的CV :: findHomography运行时错误
    opencv中使用 SURF算法匹配的遇到的问题
    C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转
    SIFI与surf
    opencv复习
    opencv老版本的IplImage使用
    python学习笔记-对象持久化保存与恢复
    Styles and Themes
  • 原文地址:https://www.cnblogs.com/2260827114com/p/6479020.html
Copyright © 2020-2023  润新知