运用C#创建一个.Net下的Web Service

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/4328112 运用C#创建一个.Net下的Web Service本文关键词: Service Web 创建 NET 微软在其.net战略中,对其主推的Web Service做了大肆的宣扬。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/4328112

运用C#创建一个.Net下的Web Service

本文关键词: Service Web 创建 NET

微软在其.net战略中,对其主推的Web Service做了大肆的宣扬。现在,Web Service正如火如荼地发展着,相关的各项新技术层出不穷。Web Service的发展正构筑着互联网时代美好的明天。在本文中,我将向大家介绍Web Service的一些基本知识、如何用C#建立一个Web Service。通过文章,我们还将对WSDL、UDDI以及未来的Web Service有一个大致的了解。

  为什么需要Web Service?

  以前,分布式的应用程序逻辑需要使用分布式的对象模型,通过使用DCOM、CORBA、RMI之类的基本结构,开发人员仍可拥有使用本地模型所提供的丰富资源和精确性,并可将服务置于远程系统中。

  当已经有中意的中间件平台(RMI、Jini、CORBA、DCOM 等等)时,我们为什么还要为Web而烦恼呢?中间件确实提供了强大的服务实现手段,但是,这些系统有一个共同的缺陷,那就是它们无法扩展到互联网上:它们要求服务客户端与系统提供的服务本身之间必须进行紧密耦合,即要求一个同类基本结构。然而这样的系统往往十分脆弱:如果一端的执行机制发生变化,那么另一端便会崩溃。例如,如果服务器应用程序的接口发生更改,那么客户端便会崩溃。为了能扩展到互联网运用,我们需要一种松散偶合的基本结构来解决这个问题。如此的情况下就迎来了Web Service的诞生。

  什么是Web Service?

  Web Service 是一种新的Web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过Web调用。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。

  Web Service是一种应用程序,它运用了Web网络技术和基于组件开发的精华成分。可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。像DCOM、RMI、IIOP等基于组件的对象模型已经流行了较长一段时间了。然而这些模型都是依赖于一个特定的对象模型协议。Web Service扩展了这些模型,使之可以和简单对象访问协议(Simple Object Access Protocol,SOAP)以及XML通信以根除特定对象模型协议带来的障碍。可将WebService视作Web上的组件编程。(参见如图1)

  Web Service基本上是利用超文本传送协议(HTTP)和SOAP来使商业数据可以在网上获得。它将商业对象(COM对象、Java Beans等)显露给在HTTP上的SOAP调用并执行远程功能调用。因此,Web Service的使用者可以在远程对象上通过SOAP和HTTP在Web上进行方法调用。

  图1

  SOAP调用是一类能引起在位置B上的Web Service组件程序执行的调用。之后,程序执行的结果就以XML文档的形式返回给在位置A上的用户。

  在图1中,在位置A的用户怎么知道在位置B的用户的一些情况的呢?这个就要涉及到一个通用标准。服务描述语言(Service Description Language, SDL),SOAP契约语言(SOAP Contract Language,SCL)以及网络可访问性规格语言(Network Accessible Specification Language,NASSL)都是为了这个目的而建立的XML类语言。然而,IBM和微软最近同意将Web服务描述语言(Web Service Description Language,WSDL)作为Web Service的标准。

  Web Service组件的结构是通过Web服务描述语言来显露的。

  面临的任务

  学会Web Service的最好方法就是自己动手做一个实例。我们都熟悉股票报价服务,纳斯达克、道琼斯都是很著名的例子。它们都提供一个输入公司代号并取得最新的股票价格的接口。本文我们就设法设计出同样的功能。

  创建Web Service的工具

  本文我们通过MS.Net Framework SDK来实现这个程序。

  创建Web Service的比较好的集成开发环境(IDE)是Visual Studio.Net。然而,你也可以很容易的用任何文本编辑器(记事本、写字板、Visual Studio 6.0)来创建一个Web Service文件。还有,你必须熟悉以下概念:

  Net平台的基础知识

  C#的基础知识

  面向对象概念的基础知识

  创建一个Web Service

  下面,我们将用C#建立一个名为“SecurityWebService”的Web Service。一个Web Service文件将含有形式为.asmx的扩展名。(就像Asp.net的文件扩展名为.aspx)

<%@ WebService Language="C#" class="SecurityWebService" %>  

  这条语句将告诉编译器程序将运行在Web Service模式下以及C#类的名称。同时我们要访问Web Service的名字空间。还有,最好添加一个对System名字空间的引用。

using System;using System.Web.Services;

  该SecurityWebService的类应该继承Web Service类的功能。因此,我们添加了下面这行代码:

public class SecurityWebService : WebService

  现在我们来运用我们的面向对象的技巧编写一个C#类。C#的类和C++、Java的类非常相象,如果你有C++和Java的基础,这个就是小菜一碟了。

  .Net下的Web Service能够设定一些基本的数据类型。因此,如果我们返回“int”、“float”或是“string”等数据类型的话,它能自动将它们转化为标准的XML输出。然而不巧的是在大多数的情况下,我们需要同一个实体的一类数据集。下面我先举个例子。我们的SecurityWebService股票报价服务要求用户输入一个公司的代号,然后它会给出公司的全名以及当前的股票价格。由此,我们需要一个公司的三条信息:

  公司代号(数据类型:string)
  公司全名(数据类型:string)
  股票价格(数据类型:double)

  我们需要将单个股票报价的数据信息分解开。可以有很多方法完成此项工作,我们这里用了最好的枚举数据类型。我们在C#中用了“structs”,和C++中的structs一样。代码如下:

public struct SecurityInfo
{
public string Code;
public string CompanyName;
public double Price;
}

  现在我们已经完成所有建立Web Service所需的模块了。因此,所有的代码如下:

<%@ WebService Language="C#" class="SecurityWebService" %>

using System;
using System.Web.Services;

public struct SecurityInfo
{
public string Code;
public string CompanyName;
public double Price;
}

public class SecurityWebService : WebService
{
private SecurityInfo Security;

public SecurityWebService()
{
Security.Code = "";
Security.CompanyName = "";
Security.Price = 0;
}

private void AssignValues(string Code)
{
// 在这里使用商业组件
// 方法调用就是用来获得所需的数据的
// 本程序中我给相应的代码添加了一个对应的字符串以方便显示
// 同时,我使用了随机数产生器来生成股票价格

Security.Code = Code;
Security.CompanyName = Code + " Pty Ltd";
Random RandomNumber = new System.Random();
Security.Price = double.Parse(new System.Random(RandomNumber.Next(1,10)).NextDouble().ToString("##.##"));
}

[WebMethod(Description="This method call will get the company name and the price for a given security code.",EnableSession=false)]
public SecurityInfo GetSecurityInfo(string Code)
{
AssignValues(Code);
SecurityInfo SecurityDetails = new SecurityInfo();
SecurityDetails.Code = Security.Code;
SecurityDetails.CompanyName = Security.CompanyName;
SecurityDetails.Price = Security.Price;
return SecurityDetails;
}请记住,这个Web Service能通过Http做任何使用。我们也许会在代码中涉及到一些很敏感的商业数据,但是却不想它落入他人之手。那解决的方案就是保护一些逻辑函数,使用户只能访问到一些用来显示数据的函数。为了达到这个目的,我们使用了关键字“[Web Method]”。下面就是示例代码:

[WebMethod(Description="This......",EnableSession=false)]

public SecurityInfo GetSecurityInfo(string Code)

  这个函数的访问类型是公有型的。标签“Description”是用来描述这个Web Service的功能的。因为我们不必储存任何session数据,所以我们将session状态设置为false。

private void AssignValues(string Code)

  这是一个应该被逻辑保护的函数。因为我们不希望我们的商业机密数据能在Web被轻易的获得,所以我们将函数的访问类型设为private(注:在这里,即使你将函数的访问类型设为public,这个函数还是不能被公共地访问到,原因是关键字“[Web Method]”没有被用到)。

  到此,我们可以用GetSecurityInfo(string)函数来获得最新的股票价格。同时,为了方便起见,我给公司代码添加了相应公司的名字。还有,股票的价格是随机产生的。

  最后,我们将该文件保存在一个由IIS控制的目录下,文件名为“SampleService.asmx”。运行后的图示如下:

  图2

  以上是一个由.Net Framework生成的Web页面,我们并没有创建这个页面(它是由系统自动产生的,所以我并不需要写任何代码来创建该页面)。这个功能使我们的工作量相对减轻了不少。同样,你也可以通过运用Asp.net的Pagelets功能或修改网页文件使页面以不同的方式显示其中的内容。

      如何使用这个Web Service?    

  现在我们来使用这个Web Service。我们先输入一些值来获得股票示例价格。

  图3

  按下Invoke按钮,我们就可以获得以下的XML文档:

  图4这样,这个Web Service就给用户提供了其所需的信息了。因为是XML格式的文档,我们需要写客户端来析取这个XML文档。客户端可以为以下几类:

  1.一个Web页面
  2.一个控制台或是Windows下的运用程序
  3.一个用WML语言描述的手机程序
  4.一个运用在PDA上的Palm或Win CE程序

  你可以直接用Http Get方法来调用这个Web Service。这样的话就不会出现第一个页面了,也不需要用户去点击Invoke按钮了。具体方法:

  http://server/webServiceName.asmx/functionName?parameter=parameterValue

  调用我们的Web Service的方法就是:

  http://localhost/work/aspx/SampleService.asmx/GetSecurityInfo?Code=IBM

  到此为止,我们已经知道如何用C#创建并使用一个Web Service,但是任务并没有完全完成。我们需要知道如何在Internet上找到我们的Web Service,我们的Web Service能不能也被收入在个大搜索引擎。为了解决这个问题,我们就需要建立一个“discovery”文件。

  创建发现文件

  在访问一个已有的Web Service以前,你必须先得找到并整合这个Web Service,这个过程就是Web Service的发现过程。通过这个发现过程,你才知道这个Web Service能为你提供什么样的服务以及你怎么和它实现互动。发现文件是一个以.DISCO为扩展名的XML文件。在实际运用中,你是不必为每一个Web Service创建发现文件的。以下就是一个发现文件的例子:

<?xml version="1.0" ?>
<disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco/">
<scl:contractRef ref="http://localhost/work/aspx/SampleService.asmx?SDL"/>
</disco:discovery>

  我们先将这个文件命名为“SampleService.disco”,并将它保存在该Web Service的目录下。如果我们是在“/work/aspx”目录下创建Web Service的话,我们就可以运用更灵活的“动态发现”了。“动态发现”能自动为我们检测“/work/aspx”目录以及子目录下的所有*.DISCO文件的,这样就省了我们不少功夫。

<?xml version="1.0" ?>
<dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000-03-17">
</dynamicDiscovery>

  你可以在http://services3.xmethods.net/dotnet/default.disco获得一份能使用的发现文件。通过分析发现文件,我们可以找到所需的Web Service。然而,在得到发现文件前你必须知道这个发现文件的确切的URL。否则你还是找不到你要的发现文件的,那么你当然就不能找到你要的Web Service了。这样,我们现在就要用到一项新技术了――通用发现,描述和整合(Universal Description,Discovery,and Integration,UDDI)来为已存在的Web Service做宣传了。UDDI是公开的,基于Internet的。这项技术目前还处于起初阶段,所以正不断发展着。你可以在http://uddi.microsoft.com/ 获得有关UDDI的参考。

  发布这个Web Service

  发布Web Service是很简单的。和Asp.net的程序差不多,你只要将.asmx文件和.disco文件拷贝到相应的目录,这样如果一切正常,这个Web Service就可以工作了。

  展望Web Service的未来

  Web Service技术的前途是相当光明的。在推动Web Service技术向前发展的道路上,不仅微软注入了很大的投资,Sun、IBM等也表示很大的兴趣。同时,网上还有为Apache和Java Web开发的SOAP工具包。然而,Web Service起步不久,还需要很多的工作要做。特别在国内,Web Service技术起步比国外有晚了一步,所以更要抓紧时间、迎接挑战。


}

相关文章
|
10天前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
25天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
143 3
|
6天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
45 13
|
10天前
|
开发框架 .NET PHP
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。
|
28天前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
45 7
|
25天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
25天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
28天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
14天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)