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