我将一些文件放在我网站的Bin文件夹中并放置一个svc文件指向一些指向我的服务类型的程序集,这真是太神奇了。然后,我可以像这样神奇地将服务引用添加到URL:
http://www.myserver.com//xxx.svc
我真的想知道如何正确生成从我的代码“添加服务引用”到代理发生的情况。 IIS在此期间做了什么?
答案 0 :(得分:3)
这不是真正的魔术 - 它是元数据交换! :-)
当您在Visual Studio中执行Add Service Reference
时,会在后台查询svc文件指定的服务端点的元数据。这基本上类似于WSDL(Web服务描述语言)文件 - 机器可读的服务描述,方法,期望的参数等等 - 以及XSD(XML模式) - 再次以机器可读的形式 - 定义使用的参数类型。
基于这两条信息,WCF客户端导入可以创建C#或VB.NET类
所以最后 - 它真的不是魔术。这是自描述服务和一些代码生成的美妙之处,它可以读取元数据并从元数据描述中创建客户端代理类
如果您对有关元数据的更多详细信息感兴趣,请阅读MSDN docs on WCF metadata - 相当广泛和深入。
答案 1 :(得分:0)
正如marc_s所述,“添加服务引用”按钮运行一个工具,从服务中收集元数据,并从中生成客户端代码。
我只想补充一点,如果您想自己查看该元数据(WSDL),可以在网址中添加“?wsdl”:
http://localhost/MyService.svc?wsdl
一个WSDL文档将链接到许多其他文档,因此您必须提出几个请求来全面挖掘它们,但看看数据类型和合同是如何传输的很有趣。
此外,如果您想阻止其他人自动为您的服务生成客户端,您可以通过从WCF配置中删除“mex”(Metadata EXchange)端点来禁用WSDL。