在使用wcf托管其他Web服务的背景下会发生什么

时间:2011-06-16 22:55:29

标签: c# asp.net wcf

当我编写以下代码以在WCF中托管REST Web服务时,我试图了解后台发生了什么:

RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(),
                                       typeof(MyConcreteService)));

此外,类定义是这样的:

public class MyConcreteService : IService

其中IService使用WebGET等定义ServiceContract和OperationContract

在设置路线时,我从不在任何地方提到IService。服务器如何找出要使用的合同?有人可以说明在后台进行的秘密,使网络服务工作吗?

1 个答案:

答案 0 :(得分:3)

WebServiceHostFactory返回WebServiceHost的实例。该类将查看服务类本身是否使用[ServiceContract]进行修饰 - 如果是,它将使用它作为合同类型。否则,它将查找服务类实现的接口,以查看哪些接口使用[ServiceContract]进行修饰。如果它只找到一个(在您的示例中就是这种情况),那么它将是用作合同类型的那个。如果它找到0或大于1,它应该抛出异常。

拥有合同类型,WebServiceHost将添加具有该合同类型的端点,相应的绑定(WebHttpBinding)和空的相对地址。它还将为Web端点添加适当的行为(WebHttpBehavior)。基本上就是这样;它可以做其他事情,比如在需要时设置内容类型映射器等,但WebServiceHost(和WebServiceHostFactory)类的优点是你不需要知道它(在大多数情况下)。