Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用VS快速将类方法封装成Web服务

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

作者头像
深蓝studyzy
发布于 2022-06-16 05:38:01
发布于 2022-06-16 05:38:01
46200
代码可运行
举报
文章被收录于专栏:深蓝居深蓝居
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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即生成接口代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
namespace Hello
{
    interface IHelloLogic
    {
        string SayBye();
        string SayHello();
        string SayHello(string name);
    }
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWebService : System.Web.Services.WebService,Hello.IHelloLogic
{
}

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWebService : System.Web.Services.WebService,Hello.IHelloLogic
{
    IHelloLogic Members#region IHelloLogic Members 

    public string SayBye()
    {
        throw new NotImplementedException();
    } 

    public string SayHello()
    {
        throw new NotImplementedException();
    } 

    public string SayHello(string name)
    {
        throw new NotImplementedException();
    } 

    #endregion
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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#region IHelloLogic Members
    [WebMethod]
    public string SayBye()
    {
        return logic.SayBye();
    }
    [WebMethod]
    public string SayHello()
    {
        return logic.SayHello();
    }
    [WebMethod]
    public string SayHello(string name)
    {
        return logic.SayHello(name);
    }
    #endregion
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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#region IHelloLogic Members
    [WebMethod]
    public string SayBye()
    {
        return logic.SayBye();
    }
    [WebMethod]
    public string SayHello()
    {
        return logic.SayHello();
    }
    [WebMethod(MessageName="SayHelloName")]
    public string SayHello(string name)
    {
        return logic.SayHello(name);
    }
    #endregion
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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服务领域涉足未深,所以可能有错误之处,希望大家指正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
服务器端释放WebService方法 编写一个普通的WebService 为WebService类添加自定义的属性标记__ScriptServiceAttribute 释放WebService方法                   __访问级别为Public                   __使用WebServiceAttribute进行标记 为页面中的ScriptManager引入asmx文件 客户端访问WebService [Namespaces.]ClassName.MethodName 依次
小白哥哥
2018/03/07
5K0
关于webservice不支持方法重载的解决办法
由于用到方法重载,没想到在web服务中会出现错误: System.Data.DataTable Get_SendedEmail(Int32, System.String) 和 System.Data.DataTable Get_SendedEmail(Int32) 同时使用消息名称“Get_SendedEmail”。使用 WebMethod 自定义特性的 MessageName 属性为方法指定唯一的消息名称。 原来,必须在方法中指定messagename来用户唯一标识且在类中指示不支持1.1标准 [WebS
跟着阿笨一起玩NET
2018/09/18
6030
转:[WebServices]介绍
1. 有关生存期的补充 正常情况下,每次调用 WebMethod,服务器都会创建一个新的 WebService 对象,即便客户端使用同一个代理对象多次调用 WebMethod。 而我们一旦调用了有缓存标记的 WebMethod,只要未超出缓存期,WebService 对象都不会被重新创建。在缓存期内调用没有缓存标记的 WebMethod,也会继续使用该 WebService 对象。有太多因素让这个缓存机制变得不那么可靠,因此我们不能奢望用缓存标记来维持特定的对象状态,况且缓存机制的设计初衷也只是为了快速输出那些比较稳定非常大的数据。 基于多用户并发调用这个环境,WebService 本身最好设计成无状态对象,我们可以使用 Session 和 Application 来保持特定的状态信息。 2. 异步调用 网上很多人在写有关 .net 2.0 的文章时,都喜欢用“优雅”这个词。的确,在 2.0 中编译器和代码生成器为我们封装了很多罗嗦的东西,诸如匿名方法、委托推断等等,当然还有这 WebService 的异步调用。我们不用再写那些个 BeginXXX、EndXXX 了,基于事件驱动的异步机制会自动为每个 WebMethod 生成一个 XXXAsync 的异步方法和 XXXCompleted 事件,我们只需调用该方法,并处理该事件即可完成异步操作,当真是优雅了不少。不要小看 2.0 的这些封装,我们编写的代码越少意味着出错的几率越小。 下面的示例中,我们使用了匿名方法来处理事件,看上去更简洁了些。 WebServices.cs
深蓝studyzy
2022/06/16
5000
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
ASMX 文件是 ASP.NET 中用于创建 Web 服务的文件。Web 服务是用于跨网络传输数据和服务的标准方法,使不同平台和编程语言的系统可以互相通信。通过 ASMX 文件,开发者可以创建基于 SOAP 协议 / HTTP 协议 的 Web 服务,这些服务可以被各种客户端(如浏览器、移动应用程序、其他服务器应用程序)调用。
Damon小智
2024/06/30
5861
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
怎么解决web service circular reference 问题
下面是一个非常简单的例子: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namesp
张善友
2018/01/29
7520
Jquery ajax传递复杂参数给WebService
http://www.cnblogs.com/kingge/archive/2011/08/04/2127642.html
跟着阿笨一起玩NET
2018/09/20
8180
DotNET企业架构应用实践 - 用服务定位器(SL)完成服务的多种实现的统一调用
        前面的文章服务定位器(SL)与AgileEAS.NET中的实现介绍了服务定位器的一些概念、应用场景与AgileEAS.NET平台中SL的实现,本文是这骗文件的一个例子与Demo,详细的
魏琼东
2018/01/12
6080
DotNET企业架构应用实践 -  用服务定位器(SL)完成服务的多种实现的统一调用
C#开发WebService实例和发布
WebService是一种跨平台,独立于编程语言之外的通信技术,将其部署在服务器端,在网络内的所有设备都可以调用这个WebService。本文介绍用C#开发WebService实例以及其部署和调用。 首先是一个简单的WebService工程的创建: 1、创建一个asp.net web应用程序,我这里起名字叫WebServiceTest
全栈程序员站长
2022/09/13
2.3K0
C#开发WebService实例和发布
WebService基于SoapHeader实现安全认证
      本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。
跟着阿笨一起玩NET
2018/09/18
1.4K0
WebService基于SoapHeader实现安全认证
服务器未能识别 HTTP 标头 SOAPAction 的值
SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。 SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目
张善友
2018/01/19
3.2K0
ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions
ASP.NET 2.0 AJAX Extensions为我们提供的主要功能如下 序列化和反序列化 客户端访问Web Service方法 服务器端AJAX控件 _____ScriptManager _____UpdatePanel _____Extender 微软的ASP.NET AJAX有一点非常让人感觉神奇的一点,也算是他宣传的一个鳌头,说的是,所有的ASP.NET程序员,不用写任何javascript代码就可以实现AJAX,那么UpdatePanel呢,就是说着话的资本,我们也知道,几乎
小白哥哥
2018/03/07
1.7K0
webservice 缓存机制
本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472
跟着阿笨一起玩NET
2018/09/19
1.4K0
[c#]Webservice中如何实现方法重载(overload)以及如何传送不能序列化的对象作参数
1。Webservice中的方法重载问题 (1)在要重载的WebMethod上打个MessageName标签 比如: [WebMethod(MessageName = "HelloWorld1")] public string HelloWorld(){     return "HelloWorld"; } [WebMethod(MessageName = "HelloWorld2")] public string HelloWorld(string msg){     return
菩提树下的杨过
2018/01/22
1.4K0
.NET基础拾遗(7)Web Service的开发与应用基础
  Web Service基于SOAP协议,而SOAP本身符合XML语法规范。虽然.NET为Web Service提供了强大的支持,但了解其基本机制对于程序员来说仍然是必需的。
Edison Zhou
2018/08/20
1.7K0
.NET基础拾遗(7)Web Service的开发与应用基础
Asp.net Ajax AutoComplete 控件的用法
AutoComplete控件是微软提供的ASP.NET AJAX Control Toolkit 中的一个控件,是用来实现类似百度搜索的自动完成效果。
拓荒者IT
2019/09/25
2.7K0
webservice示例
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
全栈程序员站长
2022/09/06
6200
Jquery Ajax 跨域调用asmx类型 WebService范例
摘要:Ajax 在 Web 2.0 时代起着非常重要的作用,然而有时因为同源策略(SOP)(俗称:跨域问题(cross domain)) 它的作用会受到限制。在本文中,将学习如何克服合作限制。本文以asmx方式搭建webservice作为测试用后端,给出完整的前后端调用解决方案、范例代码。
全栈程序员站长
2022/09/06
1.7K0
Jquery Ajax 跨域调用asmx类型 WebService范例
ASP.NET AJAX(10)__Authentication ServiceAuthentication ServiceAuthentication Service属性Authentication
在通常情况下,如果使用AJAX方式调用WebService,则可能被恶意用户利用,造成性能以及安全性的问题,所以我们需要使用一些验证方式来保护WebService,最常见方式就是Forms Authentication,这也是一种用法很简单的方式 一个使用FormsAuthentication保护WebService调用的示例 首先创建一个名为ProtectedService的WebService,代码如下 using System; using System.Collections.Generic; us
小白哥哥
2018/03/07
1.9K0
学习Altas 笔记[JS简单调用服务端方法]
      在Ajax框架中,Asp.net方面最强当属Altas最强,以前使用AjaxPro.Net和MagicAjax. 最几个都比较好用。这几个月来Altas已经进入CTP版本,是开始学习研究Altas的时机了。准备利用Altas为 http://www.yupsky.com 开发成员之间在线通讯的类似于MSN这样的功能。今天初步的学习了一下Altas,最基础的学习内容就是使用javascript调用服务端代码。      Altas和AjaxPro.Net类似,但比AjaxPro.Net强大很多。学
张善友
2018/01/19
9270
学习Altas 笔记[JS简单调用服务端方法]
Flex 调用添加了SoapHeader的web service
using System.Web.Services; using System.Web.Services.Protocols;
用户3135539
2018/09/12
5880
Flex 调用添加了SoapHeader的web service
推荐阅读
相关推荐
ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验