如何从reverseproxy服务公开功能

时间:2018-03-26 20:22:37

标签: c# .net visual-studio-2017 azure-service-fabric

我有一个reverseeproxy服务,我使用SharpReverseProxy来处理所有传入的请求:

为了配置服务,以下代码位于Startup类:

public void Configure(IApplicationBuilder app, 
    IHostingEnvironment env, 
    ILoggerFactory loggerFactory) {

    app.UseProxy(new List<ProxyRule> {
        new ProxyRule {
            Matcher = uri => uri.AbsoluteUri.Contains("/api/"),
            Modifier = (req, user) => {
                var match = Regex.Match(req.RequestUri.AbsolutePath, "/api/(.+)service");
                req.RequestUri = new Uri(string.Format("http://{0}.{1}/{2}",
                    match.Groups[1].Value,
                    req.RequestUri.Host,
                    req.RequestUri.AbsolutePath.Replace(match.Value, "/api/")
                ));
            },
            RequiresAuthentication = true
        }
    },
    r => {
        _logger.LogDebug($"Proxy: {r.ProxyStatus} Url: {r.OriginalUri} Time: {r.Elapsed}");
        if (r.ProxyStatus == ProxyStatus.Proxied) {
            _logger.LogDebug($"        New Url: {r.ProxiedUri.AbsoluteUri} Status: {r.HttpStatusCode}");
        }
    });
}

如何以外部https方式公开此服务?

我知道我们可以添加一个FabricTransportServiceRemotingListener的监听器,如下所示:

                        new ServiceInstanceListener(serviceContext => new FabricTransportServiceRemotingListener(serviceContext,
                new MyService(),
                new FabricTransportRemotingListenerSettings
                {
                    EndpointResourceName = "MyServiceEndpoint"
                }), "MyServiceEndpoint"),

我的问题是,我不理解应该用MyService()替换什么,因为顶部的ReverseProxy代码没有服务。

如何将reverseeproxy配置公开为服务,从而能够通过FabricTransportRemotingListenerSettings公开它?

1 个答案:

答案 0 :(得分:2)

你不能。 SF远程处理是一种特定于平台的通信机制。此外,它不打算在群集外部使用。

您可以公开HttpSysCommunicationListener以将您的代理公开为可靠服务的HTTP endpoint

确保将端点配置为HTTPS,如上所述。