有关IIS托管WCF Web服务的工作机制有什么好的材料吗?

时间:2010-12-28 15:24:38

标签: wcf web-services iis iis-7

我将一些文件放在我网站的Bin文件夹中并放置一个svc文件指向一些指向我的服务类型的程序集,这真是太神奇了。然后,我可以像这样神奇地将服务引用添加到URL:

http://www.myserver.com//xxx.svc

我真的想知道如何正确生成从我的代码“添加服务引用”到代理发生的情况。 IIS在此期间做了什么?

2 个答案:

答案 0 :(得分:3)

这不是真正的魔术 - 它是元数据交换! :-)

当您在Visual Studio中执行Add Service Reference时,会在后台查询svc文件指定的服务端点的元数据。这基本上类似于WSDL(Web服务描述语言)文件 - 机器可读的服务描述,方法,期望的参数等等 - 以及XSD(XML模式) - 再次以机器可读的形式 - 定义使用的参数类型。

基于这两条信息,WCF客户端导入可以创建C#或VB.NET类

  • 镜像服务端的确切服务实现 - 相同的方法名称,预期和返回的相同参数
  • 再次在C#或VB.NET中创建必要的数据类 - 基于XML模式文件

所以最后 - 它真的不是魔术。这是自描述服务和一些代码生成的美妙之处,它可以读取元数据并从元数据描述中创建客户端代理类

如果您对有关元数据的更多详细信息感兴趣,请阅读MSDN docs on WCF metadata - 相当广泛和深入。

答案 1 :(得分:0)

正如marc_s所述,“添加服务引用”按钮运行一个工具,从服务中收集元数据,并从中生成客户端代码。

我只想补充一点,如果您想自己查看该元数据(WSDL),可以在网址中添加“?wsdl”:

http://localhost/MyService.svc?wsdl

一个WSDL文档将链接到许多其他文档,因此您必须提出几个请求来全面挖掘它们,但看看数据类型和合同是如何传输的很有趣。

此外,如果您想阻止其他人自动为您的服务生成客户端,您可以通过从WCF配置中删除“mex”(Metadata EXchange)端点来禁用WSDL。