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

2024-02-09 00:08

本文主要是介绍使用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”选项提取该类的接口,将出现如图窗口

image

选中所有的方法,点击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,将出现如图提示:

image

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

[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服务领域涉足未深,所以可能有错误之处,希望大家指正。

这篇关于使用VS快速将类方法封装成Web服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/692606

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数