【转】Web Reference和Service Reference的区别

今天因为项目需要使用服务引用,就按之前的经验添加上了,步骤如下:
项目根目录——引用——右键——添加服务引用——高级——添加Web引用——输入接口的URL地址——回车(下方出现的就是接口的定义的方法)——修改Web引用名——添加引用。

按照上面的步骤就可以将引用添加到Web References文件夹下,这也是以往经验,但是具体使用时发现添加的是Web Reference并不能满足项目的需要,这里需要用的是Service Reference。在这之前也查过很多文章,大多数都说是两者没有什么大的区别,主要是Service Reference适用的.net版本更高,而且可以使用WCF。那么两者到底有什么区别呢?

一、Web Reference生成的代理可以被.net1.1或.net2.0的客户端调用;Service Reference生成的代理只能被.net3.0+的客户端调用。

二、Web Reference不能使用WCF(上面已经提到,原因是WCF需要.net3.0的支持);Service Reference则可以使用WCF(当然需要3.0+的客户端)。

三、Web Reference是由wsdl.exe生成客户端代理的,生成webservice代理类的方法,即从System.Web.Services.Protocols.SoapHttpClientProtocol派生而来,代理类代码可以指定要访问的URL属性;Service Reference是由svcutil.exe生成客户端代理的,按照新的webservice客户访问机制WCF(不是直接从System.Web.Services.Protocols.SoapHttpClientProtocol派生而来。)代理类代码没有URL属性可指定,而是在客户端的配置文件app.config中指定endpoint来访问指定的url。

那么如何添加Service Reference呢,步骤与文章开头类似,具体如下:
项目根目录——引用——右键——添加服务引用——输入地址——转到(下方会出现服务与操作两个小窗口,服务是代理类名称,操作是代理类中定义的可调用方法)——修改命名空间——确定。

与添加Web Reference不同的是没有点击“高级”按钮,高级中添加的Web Reference是.net2.0版本的引用方式,是为了兼容性才保留下来。

msdn解释:若要调用 Web 服务的方法,应调用生成的 Web 服务代理类的对应方法。 生成的代理类执行对 Web 服务方法的 Web 请求。
【注意】
要使启用 AJAX 的 ASP.NET 应用程序从脚本调用 Web 服务,必须配置该应用程序注册所需的 ASP.NET HTTP 处理程序。
您调用的 Web 服务必须是 .asmx 文件,并且必须使用 ScriptServiceAttribute 特性限定。 从脚本调用的各个方法必须使用 WebMethodAttribute 特性限定。 不带此特性的方法不在代理类中公开。

以上是服务引用的步骤及相关知识,下面看下如何在一个站点添加服务接口:

服务要建在web层,在web层或任选一个文件夹右键——添加——新建项——选择web服务(注意文件是以 .asmx为后缀)

下面是一个小例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
namespace DemoWeb.API
{/// <summary>/// WSVerify 的摘要说明/// </summary>[WebService(Namespace = "http://www.*****.com/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。// [System.Web.Script.Services.ScriptService]public class WSVerify : System.Web.Services.WebService{[WebMethod(EnableSession = true)]public DataTable GetLoginUserId(string username, string password){//检查用户是否登录DataTable dt = new BLL.company().GetUserByUsernamePwd(username, password);return dt;}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

其中WebMehodAttribute封闭类无法被继承,向使用 ASP.NET 创建的 XML Web services 中的某个方法添加此特性后,就可以从远程 Web 客户端调用该方法。否则无法调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 - 递归 回溯算法(八皇后问题)

游戏地址自己写完了可以根据结果去测试一下。 算法分析 八皇后问题算法思路分析 1&#xff09;第一个皇后先放第一行第一列 2&#xff09;第二个皇后放在第二行第一列、然后判断是否OK&#xff0c; 如果不OK&#xff0c;继续放在.第二列、第三列、依次把所有列都放完&#x…

算法 - 排序算法 的时间复杂度计算

简介 度量一个程序(算法)执行时间的两种方法 1&#xff09;事后统计的方法这种方法可行, 但是有两个问题&#xff1a;一是要想对设计的算法的运行性能进行评测&#xff0c;需要实际运行该程序&#xff1b;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式&a…

【转】Magento2目录结构

目录结构 可以看到,M2的目录挺多的。 我们依次来讲解下, 我这里截取的是github里的源代码,核心代码跟composer和官网下载的源码包的存放路径不一样。 如果是github下载的&#xff0c;那么m2的核心源代码就在app/code/Magento里。 如果是composer安装或者官网下载的源码包&#…

算法 - 排序算法 (算法学习)(冒泡、选择、插入、希尔、快排、归并)

1&#xff09;冒泡排序 1.1 图解演示 2&#xff09;选择排序 import java.text.SimpleDateFormat; import java.util.Date;/*** 选择排序*/ public class chooseSort {public static void selectSort(int[] arr){for (int i 0; i < arr.length; i) {int minIndex i;int m…

【转】1.4 Magento2语法讲解

M2不是一个标准的MVC架构。 这是m2的app/code/Magento/Catalog插件代码。 可以看到&#xff0c;它有Controller,也有Model,也有view. 奇怪的是,在Controller找不到调用模版的代码。 这是因为我们之前讲过,m2的页面都是用xml写的&#xff0c;xml里是由若干个block组成的。block里…

【转】1.5 运行原理剖析

我们不讲底层架构,核心原理,太枯燥&#xff0c;也记不住&#xff0c;没必要。 毕竟不是人人都要当架构师。 我们从M2的模式说起。 理解了他的模式,就知道了他的原理。 M2有3种模式, 默认模式(default)开发模式(developer)生产模式(production) 默认模式 安装完成后&#xf…

SparkStreaming简介 - 与第一个Spark实时计算程序,使用netcat来写数据 - wordcount

官方文档 Spark Streaming 火花流是spark API的扩展&#xff0c;它支持可伸缩、高吞吐量、容错的实时数据流处理。 数据可以从多种来源(如Kafka、Flume、Kinesis或tcp套接字)中摄取&#xff0c;并且可以使用用高级函数表示的复杂算法进行处理&#xff0c;例如map, reduce, jo…

【转】老邹说Magento的前世今生

文章目录[隐藏] Magento Commerce的历史Magento 2版本历史Magento电子商务的特点和功能Magento市场Magento认证Magento事件为什么Magento统治电子商务领域 想要深入了解magento&#xff0c;我们有必要回顾一下Magento的前世今生&#xff0c;看它是如何一步步成长起来的。 为什…

【转】Magento2 安装系列一 虚拟机、CentOS7 安装

前言 最近打算在Windows10安装最新的magento2.3&#xff0c;由于mg2.3对Windows支持不太友好&#xff0c;所以就打算在Windows10安装虚拟机&#xff0c;虚拟机安装CentOS7版本的Linux&#xff0c;Linux安装Lnmp环境&#xff0c;最终安装Magento2.3.虚拟机选择与安装 我这边打算…

SparkStreaming -Kafka数据源

SparkStreaming处理kafka作为数据源 所以我们要创建的是kafka的Dstream&#xff0c;那么就要使用到KafkaUtils下的createStream&#xff0c;先来看一下ctrl点进去查看&#xff0c;然后来写参数 package date_10_16_SparkStreamingimport org.apache.spark.SparkConf import or…

SparkStreaming - 无状态与有状态 updataStateByKey

无状态与有状态 简单来说&#xff0c;无状态就是每个采集周期分别采集&#xff0c;并不会把前面的采集周期的数据一起计算 有状态就是&#xff1a;把前面采集周期的也算进来&#xff0c; 比如wordcount&#xff0c;无状态统计的就是每个采集周期内的个数&#xff0c;有状态的…

flink(一个流处理,一个批处理)

流处理&#xff0c;这里用netcat来完成 package com.smalltiger.flinkWCimport org.apache.flink.api.java.utils.ParameterTool import org.apache.flink.streaming.api.scala._/*** Created by smalltiger on 2019/11/6.* flink基于流处理的一个WordCount统计*/ object Stre…

volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))

volatile是java虚拟机提供的轻量级的同步机制&#xff1a; 1.保证可见性&#xff1a;线程之间可见性(及时通知) 2.不保证原子性 3.禁止指令重排 先了解一下jvm同步 由于JVM运行程序的实体是线程&#xff0c;而每个线程创建时JVM都会为其创建一个工作内存&#xff08;或者称为…

CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点

1、CAS底层原理&#xff1f; 自旋锁(cas思想)unsafe类&#xff0c;保证原子性靠的是unsafe类 1.首先可以看到&#xff1a; atomicInteger.getAndIncrement();getAndIncrement()的底层是 public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset,…

cas引出的ABA问题?如何解决?- 理解原子引用、时间戳(版本号)原子引用

ABA问题&#xff1a; 假如有两个线程1&#xff0c;2&#xff1b; cas下&#xff1a;1.线程取值完等待&#xff0c;2线程取值并把A改成B&#xff0c;有把B改成A&#xff0c;这是1线程执行会任务A还是原来的A没有发生改变&#xff0c;如果不在乎中间结果&#xff0c;只看收尾&am…

java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)

1.公平锁、非公平锁 2.可重入锁&#xff08;递归锁&#xff09; 3.自旋锁 AtomicReference atomicReference new AtomicReference();//原子引用线程下面代码5秒钟自旋了10万次&#xff0c;还是很消耗CPU的 package HighConcurrency;import java.util.concurrent.TimeUnit; imp…

CountDownLatch,同步辅助类

public class CountDownLatchextends Object一个同步辅助类&#xff0c;在完成一组正在其他线程中执行的操作之前&#xff0c;它允许一个或多个线程一直等待。 假设定义一个计数器为 5。每个线程完成任务后计数减1计数器减为 0 则通知等待的线程。 用给定的计数 初始化 Count…

CyclicBarrier-同步辅助类

与CountDownLatch相反&#xff0c;CyclicBarrier是做加法 public class CyclicBarrierextends Object一个同步辅助类&#xff0c;它允许一组线程互相等待&#xff0c;直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中&#xff0c;这些线程必…

阻塞队列-BlockningQueue

阻塞队列的前言介绍引用于https://www.cnblogs.com/aspirant/p/8657801.html&#xff0c;写的挺好有兴趣可以看一看 一. 前言 在新增的Concurrent包中&#xff0c;BlockingQueue很好的解决了多线程中&#xff0c;如何高效安全“传输”数据的问题。通过这些高效并且线程安全的…

多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)

在使用Lock之前&#xff0c;我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法&#xff0c;与Lock配合可以实现等待/通知模式 下面用的是lock锁 …