使用IIS但没有WCF的基本HTTP服务

时间:2011-01-14 15:04:53

标签: c# .net wcf http iis

我正在寻找一种方法来托管一个非常基本但高性能的HTTP服务,该服务使用.Net与IIS集成。

我考虑过使用HttpListener的选项,但我怀疑它的性能,我们还要运行许多服务,这些服务都在同一端口上进行监听。

实际上,如果有一个WCF端点可以捕获任何带有以该端点开头的url的请求,但可能以任何结尾,那么这可能是一个解决方案。

我正在构建一个客户端库,它将使用自定义元数据端点,自定义发现端点和资源封装自定义协议。我们的想法是客户端库将自动在端点和资源(/其他端点)之间建立关联,因此无法使用WCF,因为这种映射在编译时是未知的。

另一个原因是我们正在寻求平台独立性的方向,我们希望将来能够轻松地用Apache替换IIS。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你仍然可以使用WCF来提供服务。在IIS之外的托管方面,您有以下选择:

http://msdn.microsoft.com/en-us/library/ms730158.aspx

此外,您的客户端可以在运行时构建它的绑定和端点。因此,不需要在.config的system.serviceModel部分中指定详细信息。可以在.config中指定的所有内容也可以在代码中完成。

[编辑] 您不必将每个端点“指定”到WCF。如果您知道运行时的地址,则将其简单地传递给创建服务代理的代码。看一下ChannelFactory类,你可以传递一个绑定(你可以从配置中获取,或者在运行时可以获得)和一个端点(通过提供地址非常简单地创建端点)这里是一个示例方法创建类型为T的服务代理。在下面的示例中,端点地址来自.config,但您可以从代码中的任何位置传入它。

    /// <summary>
    /// Creates a service proxy from a binding name and address
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static T Create<T>()
    {
        string endpoint = ConfigurationManager.AppSettings["FactoryEndPointAddress"];
        string bindingname = ConfigurationManager.AppSettings["FactoryBindingName"];
        var address = new EndpointAddress(endpoint);
        var factory = new ChannelFactory<T>(GetBinding(bindingname), address);
        return factory.CreateChannel(address);
    }