我在 Azure 上设置了一个 Service Fabric 集群,并且有一个运行 2 个服务的应用程序。现在我希望能够连接到浏览器中的服务,就像我在 localhost 上运行它时一样。该应用程序使用 Owin 和 Swagger。这是在 localhost 上运行的样子:running on localhost。当我尝试从 Azure 连接到它时,出现超时错误。我在应用程序中使用端口 20002 和 20001,并且我在设置集群时打开了端口(端口 19000、19080、20001 和 20002 在我的集群中打开)。这是我在资源管理器中的服务:资源管理器中的服务。集群设置了证书安全性,并且我已将证书添加到浏览器中(我正在使用它连接到资源管理器)。我的 CreateServiceInstanceListeners 代码:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return Context.CodePackageActivationContext.GetEndpoints()
.Where(endpoint => endpoint.Protocol.Equals(EndpointProtocol.Http) || endpoint.Protocol.Equals(EndpointProtocol.Https))
.Select(endpoint => new ServiceInstanceListener(serviceContext => new OwinCommunicationListener("", new Startup(), serviceContext)));
}
和我的 OpenAsync 代码:
public OwinCommunicationListener(string appRoot, IOwinAppBuilder startup, StatelessServiceContext serviceInitializationParameters)
{
_startup = startup;
_appRoot = appRoot;
_parameters = serviceInitializationParameters;
}
public Task<string> OpenAsync(CancellationToken cancellationToken)
{
var serviceEndpoint =
_parameters
.CodePackageActivationContext
.GetEndpoint("ServiceEndpoint");
var port = serviceEndpoint.Port;
var root =
String.IsNullOrWhiteSpace(_appRoot)
? String.Empty
: _appRoot.TrimEnd('/') + '/';
//TODO: Make localhost configable
_listeningAddress = String.Format(
CultureInfo.InvariantCulture,
"http://+:{0}/{1}",
port,
root
);
_serverHandle = WebApp.Start(
_listeningAddress,
appBuilder => _startup.Configuration(appBuilder)
);
var publishAddress = _listeningAddress.Replace(
"+",
FabricRuntime.GetNodeContext().IPAddressOrFQDN
);
ServiceEventSource.Current.Message("Listening on {0}", publishAddress);
return Task.FromResult(publishAddress);
}
和我的服务端点:
<Endpoints>
<Endpoint Name="ServiceEndpoint" Port="20002" />
</Endpoints>
总结一下我的问题:如何使用 swagger 等方式在浏览器中访问我的 Service Fabric 应用程序服务?