在 VS 类库项目中 Add Service References 和 Add Web References 的区别

原文:在 VS 类库项目中 Add Service References 和 Add Web References 的区别

出身问题:

1.在vs2005时代,Add Web Reference(添加Web服务引用)的功能主要是添加Web Service引用。基于.NET Framework 2.0。

2.自VS2008以后,为了对.NET Framework 3.0 或 3.5版本上WCF Service Library的支持。增加了Add Service Reference(添加服务引用)功能。但为了版本向前兼容而保留了Add Web Reference(添加Web服务引用)。

生成引用文件的区别(本段来自于网上评论,仅供参考):

用两种方式添加同一个WebService,生成 Reference.cs的区别:
1.主要添加引用都有一个获取服务元数据,反序列话本地类文件的过程。这个结构也基本类似。都包含wsdl\discovery等文件。
这个也和WCF Service支持Web Service的核心行业标准有关系。毕竟WCF的特性之一就是兼容Web Service的特性。
2.不同的地方时Add Web Reference 生成的 Reference.cs文件里,包含一个服务代理类,他负责与Web服务通信,它继承一个Soap类,使用SOAP协议,SOAP简单对象访问协议,基于XML语言。此外还包含一些Web服务类里定义的方法,和与之相关的异步调用方法和事件。遵守.NET Web Service 的主要规则。
3.Add Service Reference生成的客户端文件 Reference.cs。我看了一下,这个也会反序列化一个本地代理类,很相似和前者。不过除了服务类和其相关的一些别的类和契约接口。其中比较重要就是一个契约和一个通信管道。这个主要和WCF框架的编程模型和反序列话机制有关系。因为WCF 强调的是 契约的概念,还有就是绑定协议,这个就直接决定了客户端和服务端通信的通道类型。你在这个文件里也能看到。此外还有服务请求和相应对应的信息。遵循WCF服务框架的规则。

使用区别:

1.Add Web Reference:

构造实例 WebReference1.Service1 webs1 = new WebReference1.Service1()的构造方法不可重载。使用实例webs1时,可以通过webs1.Url来改变引用的地址。如:webs1.Url = "http://localhost:7280/Service1.asmx"。

2.Add Service Reference:

构造实例WebReference1.Service1 webs1 = new WebReference1.Service1()提供重载构造方法,默认构造方法引用的地址为<client>节点下<endpoint>中的配置地址,也可用ServiceReference1.Service1SoapClient webs2 = new ServiceReference1.Service1SoapClient("Service1Soap", "http://localhost:7280/Service1.asmx")来指定服务地址。不可以再用webs2.Url = "http://localhost:7280/Service1.asmx"来改变服务地址。

使用区表小结:

Add Service Reference只能在构造实例实例时指定服务地址,不可动态改变。这样可以再编译时检查出错误,以减少运行时错误。

时间: 2024-10-16 16:09:40

在 VS 类库项目中 Add Service References 和 Add Web References 的区别的相关文章

WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary)

原文:WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary) 在文件夹或者项目右键-> Add(添加),会弹出可以快捷添加的资源,但是你会发现没有 ResourceDictionary资源可以选择. 解决此问题方法: 第一步:工程->右键->Unload Project 第二步:刚刚Unload的这个工程->右键->Edit XXXX : 第三步:PropertyGroup中添加    <Pr

.NET Core 3.0或3.1 类库项目中引用 Microsoft.AspNetCore.App

在 ASP.NET Core 3.0+ web 项目中已经不需要在 .csproj 中添加对 Microsoft.AspNetCore.App 的引用<PackageReference Include="Microsoft.AspNetCore.App" />但是在 .NET Core 3.0+ 类库项目中如果不引用 Microsoft.AspNetCore.App ,就无法使用 ASP.NET Core 3.0 的程序集.在类库项目的 .csproj 中将 <Pro

VS调试运行出错,某些类库项目中引用的命名空间提示不存在

这两天做监控中心项目开发,很有意思,手底下的兄弟 在开发过程中  遇到的一个很诡异的问题 重新下载项目之后,调试运行 系统提示某类库下引用的命名空间不存在.是不是引用的类库项目没生成?重新单独运行生成要引用的类库,然后再次运行项目 还是提示不存在 很奇怪.  后来想到 是不是跟项目的存在路径有关系.项目下载后 默认他放在了VS在C盘的project目录下 WIN10的操作系统 .试一试吧 把项目拷到D的某个目录下  再次调试运行   运行正常

【CITE】当类库项目中无法使用Application.StartupPath的时侯 (注:主要是在进行反射读取文件的时候!!)

http://jcserver.blog.163.com/blog/static/24044859200851582354135/ 通常我们WinForm编程时,要获取程序当 前运行的文件夹路径会用Application.StartupPath ,但是Application.StartupPath在编写类库项目时却无法 使用,因为我们根本无法用using System.Windows.Forms;来引入Application.StartupPath 的命名空间,这个时侯我们要用AppDomain

当类库项目中无法使用Application.StartupPath

通常我们WinForm编程时,要获取程序当前运行的文件夹路径会用Application.StartupPath ,但是Application.StartupPath在编写类库项目时却无法使用,因为我们根本无法用using System.Windows.Forms;来引入Application.StartupPath 的命名空间,这个时侯我们要用AppDomain.CurrentDomain.BaseDirectory. private static string fullPathFileName

MVC 项目中为什么会有两个web.config

我们对MVC 并不陌生, 在创建MVC项目时,总会发现,在工程目录 中有两个 web.config 文件,一个是在工程的根目录下,一是在 views 下,两个web.config 中的内容也不尽相同,那么为什么会有两个 web.config 文件,这就是这篇随笔将要说明的. 根目录下的 web.config 文件 根目录下的web.config 文件是对根目录下的所有文件起作用,在打开根目录下的 web.config 文件时,你会发现web.config 为所有的路径或动作注册了 HttpNot

.NET Core类库项目中如何读取appsettings.json中的配置

这是一位朋友问我的问题,写篇随笔回答一下.有2种方法,一种叫丑陋的方法 —— IConfiguration ,一种叫优雅的方法 —— IOptions . 1)先看丑陋的方法 比如在 RedisClient 中需要读取 appsettings.json 中的 redis 连接字符串: { "redis": { "ConnectionString": "xxx" } } 需要在 RedisClient 的构造函数参数中添加 IConfigurati

springmvc项目中java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListenerjava.lang.ClassNotFoundException: org.springframework.web

.NET Core 控制台项目中的Nuget打包类库及引用

由于使用的是MAC版本的VSCode,所以全部是通过dotnet命令来完成的. 1.dotnet new lib 创建类库项目: 2.编辑项目根目录下的.csproj文件,添加版本号(建议): 1 <Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 <TargetFramework>netstandard1.4</TargetFramework> 5 <Version>