【问题标题】:what happens in the background of hosting a rest webservice using wcf使用 wcf 托管 REST Web 服务的后台会发生什么
【发布时间】:2011-06-21 07:37:33
【问题描述】:

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

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

另外,类定义是这样的:

public class MyConcreteService : IService

IService 使用 WebGET 等定义 ServiceContract 和 OperationContract

在设置路线时,我从未在任何地方提及IService。服务器如何找出要使用的合约?有人能说出使 Web 服务正常工作的幕后秘密吗?

【问题讨论】:

标签: c# asp.net wcf


【解决方案1】:

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

拥有合约类型,WebServiceHost 将添加一个具有该合约类型的端点、适当的绑定 (WebHttpBinding) 和一个空的相对地址。它还将为 Web 端点添加适当的行为 (WebHttpBehavior)。基本上就是这样;它可能会做其他事情,例如在需要时设置内容类型映射器等,但 WebServiceHost(和 WebServiceHostFactory)类的美妙之处在于您不需要了解它(在大多数情况下)。

【讨论】:

  • 感谢您的解释!这很有帮助。有没有文档或资源可以指点我,我可以在哪里阅读更多相关信息?
  • 您可以查看 MSDN 上的 ServiceHostFactory 和 WebServiceHostFactory 类的文档,我认为这是这些的“官方”文档。我在blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/… 有一篇关于服务主机工厂的博文,其中包含有关它的详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2011-07-19
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
相关资源
最近更新 更多