使用VS快速将类方法封装成Web服务

在项目中有时需要将整个业务逻辑类下面的方法封装成Web服务,由于只是简单的封装,在Web服务的后台代码中不会写上任何逻辑,这时我们就需要Web服务提供的方法与类下面提供的方法相同,这是就考虑到使用接口。申明一个接口,然后让业务逻辑类和Web服务类都实现该接口即可。这里我们就要用到VS中一个很好的功能:重构!

假设我们现在有一个业务逻辑类HelloLogic用于处理一些业务逻辑,如:

 

namespace Hello
{
    public class HelloLogic
    {
        public string SayHello()
        {
            return "Hello";
        }
        public string SayHello(string name)
        {
            return "Hello" + name;
        }
        public string SayBye()
        {
            return "Bye";
        }
    }

点击“Refactor”菜单下的“Extract Interface”选项提取该类的接口,将出现如图窗口

选中所有的方法,点击OK即生成接口代码:

using System;
namespace Hello
{
    interface IHelloLogic
    {
        string SayBye();
        string SayHello();
        string SayHello(string name);
    }

由于需要在Web服务项目中使用该接口,这里需要将interface改成pulic的。然后在web服务项目中添加对该程序集的引用。新建HelloWebService页面,在后台代码上申明实现该接口:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWebService : System.Web.Services.WebService,Hello.IHelloLogic
{

将光标放在IHelloLogic上,使用快捷键Shift+Alt+F10,将出现如图提示:

第一个是实现该接口,第二个是明确实现该接口,这里由于只有这个接口,而且就算有多个接口,只要接口中的函数不重复就可以直接使用第一个。选择第一个选项,系统将自动生成代码:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWebService : System.Web.Services.WebService,Hello.IHelloLogic
{
    IHelloLogic Members

 

接下来只需要将方法调用写到具体的函数里面就可以了。当然不能忘记了使用WebMethod特性。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWebService : System.Web.Services.WebService, Hello.IHelloLogic
{
    HelloLogic logic = new HelloLogic();
    IHelloLogic Members

现在的代码已经可以编译通过了,但是有一个问题那就是在一般类方法中可以使用函数名重载,但是Web服务不能使用,我们这里对SayHello方法的重载需要进行修改。那么怎么实现Web服务下的函数重载拉?那就要用到MessageName属性对方法进行重命名了。使用MessageName 属性后还没有完,[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]这里的标注使得该Web服务不符合 WS-I Basic Profile v1.1,需要将属性值改为WsiClaims.None。最终完成的代码应该是:

 

using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using Hello;
/// <summary>
/// Summary description for HelloWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class HelloWebService : System.Web.Services.WebService, Hello.IHelloLogic
{
    HelloLogic logic = new HelloLogic();
    IHelloLogic Members

调用的时候我们将看到一个SayHello方法,一个SayHello1方法,这里的SayHello1方法就是对应的SayHello(string)方法了。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HelloService.HelloWebServiceSoapClient h = new ConsoleApplication1.HelloService.HelloWebServiceSoapClient();
            Console.WriteLine(h.SayBye());
            Console.WriteLine(h.SayHello());
            Console.WriteLine(h.SayHello1("test"));
        }
    }

好了,整个Web服务的调用就已经完成了,使用VS自带的重构功能来提取接口,实现接口有助于提供我们的开放效率,同时也降低了我们在封装成web服务的时候发生遗漏、拼写错误等失误。
由于本人对Web服务领域涉足未深,所以可能有错误之处,希望大家指正。

时间: 2016-05-06

使用VS快速将类方法封装成Web服务的相关文章

使用Axis2和JiBX将Java类转换成Web服务,第2部分

使用Axis2和JiBX将Java类转换成Web服务,第2部分: 把XML转换成功能全面的Web服务 本文配套源码 简介 Apache Axis2 提供了好几种 XML 解决方案,可以轻松的开发功能强大的 Web 服务.Axis2 是实现 Web 服务的一个非常不错的选择.由于 Apache Axis2 和 Apache Geronimo duo 是免费而且开放源码的,因此可以考虑使用这两者. 在本系列的前一部分中,我向您介绍了在本系列两篇文章中使用到的 Java 类.我们通过 WSDL 将这些

使用Axis2和JiBX将Java类转换成Web服务,第1部分

使用Axis2和JiBX将Java类转换成Web服务,第1部分: 使用XML通过Java类定义Web服务 本文配套源码 简介 Web 服务在日常开发中重要性与日俱增,Axis2 也成为了倍受人们欢迎的开发Web 服务的开放源码平台.Axis2 使用Java 语言编写,它能利用了 JiBX(一种框架,用于将XML和Java绑定在一起)的自由性.假设您有一个含有大量 Java 类和数据结构的 Java 项目,而且不想打乱或者更改它们.JiBX 会帮助您实现这一切,它把在 Axis2 中使用的 XML

J2EE的Web服务原理和体系结构慨述

Web服务(Web Services)是目前程序设计领域中的一项新技术,是一个崭新 的分布式计算模式,在不同系统平台之间具有互操作性,通过因特网,实现不同 应用程序之间的远程过程调用.Web服务使用基于XML 的消息处理作为基本的数 据通讯方式,消除使用不同组件模型.操作系统和编程语言的系统之间存在的差 异,使异类系统能够作为单个计算网络协同运行.开发人员可以用象过去在创建 分布式应用程序时使用组件一样的方式创建将来自各种源的Web服务组合在一起 的应用程序. Web服务是建立在一些通用协议的基

使用 PowerDesigner 9.5 创建 Web 服务

web|创建 使用 PowerDesigner 9.5 创建 Web 服务   Sybase 公司PowerDesigner 总设计师Xiao Wang撰稿   Web 服务允许您以标准格式提供现有的或新增的功能,并且允许用户和应用程序从任何位置访问它们. PowerDesigner 9.5 同时针对 Microsoft .NET 和 Java 引入了完善的 Web 服务设计和生成机制.使用 PowerDesigner 9.5,您可以专注于 Web 服务的设计,而将所有必需的生成.实现构造的任务

怎样在J2EE组件中引用和查找Web服务

j2ee|web|web服务 本文将讨论怎么在J2EE组件中引用Web服务.并且通过JNDI来查找Web服务.在内容组织上,首先把一个EJB2.1无状态会话Bean发布成Web服务,然后开发基于JSP的Web服务客户端,最后着重介绍怎么在JSP的部署时引用Web服务,并且讨论怎么通过JNDI来查找和调用Web服务.阅读本文前您需要以下的知识和工具:J2EE1.4 SDK,并且会初步使用:掌握基本的JAX-RPC Web服务开发技能:了解JNDI的基本知识,能够使用它进行简单编程:一般的Java编

很老的文章了,不知道有人贴过没有:Web服务发展中的一些问题

web|web服务|问题 Web服务发展中的一些问题 日期: 2001年10月10日       以前从来没有产生过如此激动人心的协议. 但是仅仅是不停的念叨诸如SOAP, WSDL, 和UDDI--定义Web 服务的三种协议--之类的缩略语并不能让组件软件结构和通用的XML集成的想法成为现实. 要使Web服务开始工作, 与之相关的协议必须被重新定义, 相应的开发工具也必须被发布出来, 而IT经理和开发者中必须来一场文化革命. 特别是微软和IBM在交流Web服务所能带来的好处方面发挥了另人惊讶的

Adaptive Server Anywhere的web服务

Adaptive Server Anywhere 在数据库服务器中集成了一个 HTTP 服务器和一个 SOAP 管理器.它允许您通过 HTTP 发送一个 SOAP 请求给Adaptive Server Anywhere,然后 Adaptive Server Anywhere 将应答返回至请求 HTTP 的客户端. 您可以将数据库中的存储过程或查询暴露成 web 服务.作为一个简单的例子,以下语句创建了一个 web 服务,它提供了系统表的列表: CREATE SERVICE mytablesTYP

用WSAS和Eclipse简化Web服务的创建

现在 Web 服务无处不在.如果需要为正在开发的新应用程序或是新特性创建 Web 服务,这是一个好机会.而在不久前,创建 Web 服务还是一项费力的工作.WSO2 意识到了这种情况并创建了一个 Eclipse 插件来帮助您更轻松地使用 Web 服务.本文将介绍 WSO2 Web Services Application Server (WSAS) Eclipse 插件以及它如何帮助开发 Web 服务. WSO2 WSAS 是什么? 在深入介绍适用于 Eclipse 的 Web Services

JAVA与.NET的相互调用通过Web服务实现相互调用

JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧.在这里在下向各位介绍一下,JAVA与.NET相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式.首先