Web Reference与Service Reference

119

我在Paypal上遇到了一个巨大的障碍。 我创建了一个普通的C#项目,使用其WSDL创建了一些包装类。

如果您创建一个非Web项目,则唯一的选项是添加Web服务引用。 这将构建与Web Reference相同的代理类集合,但实际上不是... 它会添加更多连PayPal工作人员也不知道的内容。

因此,我一直在寻找这个代理类列表中正确的接口来用作服务(SoapBinding),而PayPalAPIAASoapBinding却不在那里,我一直告诉我们的PayPal联系人。

由于我没有看到可以在基于Web Reference的服务引用中看到的PayPalAPIAASoapBinding,因此我只能看到以下两个接口,这些接口似乎是我需要使用的:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

我想到原来可能是创建了Service Reference而不是Web Reference,Web Reference是Web项目的选项。但是我不想让我的服务引用与我的Web项目紧密耦合。这就是我创建C#项目的原因。

那么什么是Service Reference和Web Reference?如果Service Reference会给我提供一组与Web Reference不同的接口,我该如何将其分离到另一个项目中呢?

此外,更加混乱的是,VS 2008还有Web Service Application项目。

那么我应该使用什么?我们正在使用.NET 3.5框架,而且还没有准备好转移到WCF。那么即使不使用WCF,我是否仍然可以使用新的Service Reference?如果您正在使用.NET 3.5而没有使用WCF,但仍想进行基本的Web服务,那么您是否仍然要使用Service Reference,并且只是不使用WCF框架?这意味着它是否仍然可以像.NET 2.0的Web Reference一样使用,只是你会得到完全不同版本的WSDL?


可能是Web 引用和服务引用之间的区别?的重复问题。 - Sruit A.Suk
5
八年后仍然具有相关性。 - Mike Devenney
4个回答

223

添加Web引用是旧式且已弃用的ASP.NET Web服务(ASMX)技术,仅使用XmlSerializer,如果您这样做,就会获得一个ASMX Web服务的ASMX客户端。几乎任何项目(Web应用程序、Web站点、控制台应用程序、Winforms等)都可以执行此操作。

添加服务引用是新的方法,它添加了一个WCF服务引用,提供了比旧的ASMX更先进、更灵活的服务模型。

如果您还没有准备好迁移到WCF,那么仍然可以添加旧式的Web引用,如果您确实需要:当您执行“添加服务引用”时,在弹出的对话框上,单击左下角的[高级]按钮:

alt text

在接下来弹出的对话框中,选择底部的[添加Web引用]按钮。


6
微软把它隐藏在 WCF 对话框里,这简直太愚蠢了!而且放置在这里毫无意义。 - PositiveGuy
9
我认为微软正在试图巧妙地引导你默认使用WCF,只有在你真的决定使用旧式ASMX时才会使用它。 - marc_s
28
如果你使用Alt + PrtScn,你可以截取当前活动窗口的快照,这样你就不必手动裁剪想展示的内容了 :o) - Ernest
这在2017年仍然有效吗? - sparkyShorts
1
@sparkyShorts:是的。 - marc_s
显示剩余3条评论

9
如果我理解你的问题正确:
右键单击您的项目,然后单击“添加服务引用”以添加 .net 2.0 Web Service 引用而不是 WCF 服务引用。
然后在对话框底部左侧点击“高级..”。
接着,在下一个对话框的左下方点击“添加 Web 引用..”。
现在,您可以像您所期望的那样添加常规 SOAP Web 引用。

1
这需要计算机上安装.NET 2.0吗?或者.NET 4.0能够处理基于.NET 2.0的“Web Reference”技术吗?我想知道,因为我正在.NET 4.0应用程序中部署SOAP webservice作为“Web Reference”。 - Computer User

4
最终,两者都能实现相同的功能。在代码上有一些不同:Web服务不会添加项目根命名空间,但是服务引用会将服务类添加到项目的命名空间中。ServiceSoapClient类的名称不同,但并不重要。在使用TFS时,我更愿意使用服务引用,因为它与源代码控制更好地配合使用。两者都可以使用SOAP协议。
我发现使用服务引用更好,因为它是新的,所以维护得更好。

4

添加服务引用可以创建一个WCF客户端,只要使用适当的绑定,就可以用它来与常规Web服务进行通信。添加Web引用将允许您仅创建Web服务(即SOAP)引用。

如果您绝对确定还没有准备好使用WCF(真的不知道为什么),那么应该创建一个常规Web服务引用。


3
因为WCF对于新手来说不容易,再加上我的老板不让我转用它才是真正的原因。我们只能在现有代码上进行开发。面对这种情况,我也无能为力。 - PositiveGuy
7
我认为你和你的老板都有误解。两种类型的引用都会创建一个类,该类提供调用服务操作的方法。那个由“服务”引用创建的类恰好继承自一个基类,而这个基类恰好在微软认为属于它所称的 WCF 技术的库中,这与问题并无关联。 - Daniel Pratt
2
这需要计算机上安装.NET 2.0吗?或者.NET 4.0能够处理基于.NET 2.0的“Web Reference”技术吗?我想知道,因为我正在.NET 4.0应用程序中部署SOAP webservice作为“Web Reference”。 - Computer User

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接