我正在寻找一种方法来托管一个非常基本但高性能的HTTP服务,该服务使用.Net与IIS集成。
我考虑过使用HttpListener的选项,但我怀疑它的性能,我们还要运行许多服务,这些服务都在同一端口上进行监听。
实际上,如果有一个WCF端点可以捕获任何带有以该端点开头的url的请求,但可能以任何结尾,那么这可能是一个解决方案。
我正在构建一个客户端库,它将使用自定义元数据端点,自定义发现端点和资源封装自定义协议。我们的想法是客户端库将自动在端点和资源(/其他端点)之间建立关联,因此无法使用WCF,因为这种映射在编译时是未知的。
另一个原因是我们正在寻求平台独立性的方向,我们希望将来能够轻松地用Apache替换IIS。
谢谢!
答案 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);
}