Owin과 함께 서비스 패브릭 프로젝트를 진행하고 있으며 클라우드에 배포하는 데 문제가 있습니다. 나는 같은 문제를 가진 다른 사람들을 찾았지만 클러스터의 오류가 어디서 코드가 잘못되었는지 알려주는 답을 발견했다. 필자는 실패한 메서드를 작성하는 방법에 대한 Microsoft Owin 자습서를 따랐지만 운이 없었습니다. Visual Studio에서 Localhost 디렉터리로 프로젝트를 실행할 수는 있지만 Azure의 서비스 패브릭 클러스터에 배포하면 문제가 발생합니다. 5 노드 클러스터가 실행 중이고 배포 할 때 2 분 후 경고가 시작되고 5 분 후에 오류가 발생합니다. 응용 프로그램의 상태는 "inbuild"입니다. Image of warning 및 Image of error.Owin에서 Azure 서비스 패브릭 클러스터로 서비스 패브릭 프로젝트를 배포 할 때의 문제
나는 두 가지 서비스가 있고, 내 클러스터에서 오류가 (각 서비스 (OpenAsync)에 같은 방법으로) 이러한 두 가지 방법에 오류가 있습니다 : 클러스터에서 오류가 오류가 알려줍니다
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('/') + '/';
_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);
}
_serverHandle = WebApp.Start(
_listeningAddress,
appBuilder => _startup.Configuration(appBuilder)
);
(다른 서비스로부터) 다른 방법 :
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('/') + '/';
_listeningAddress = String.Format(
CultureInfo.InvariantCulture,
"http://+:{0}/{1}",
port,
root
);
try
{
_serverHandle = WebApp.Start(
_listeningAddress,
appBuilder => _startup.Configuration(appBuilder)
);
}
catch (Exception e)
{
Console.WriteLine(e);
throw e;
}
var publishAddress = _listeningAddress.Replace(
"+",
FabricRuntime.GetNodeContext().IPAddressOrFQDN
);
ServiceEventSource.Current.Message("Listening on {0}", publishAddress);
return Task.FromResult(publishAddress);
}
이 섹션
try
{
_serverHandle = WebApp.Start(
_listeningAddress,
appBuilder => _startup.Configuration(appBuilder)
);
}
catch (Exception e)
{
Console.WriteLine(e);
throw e;
}
내 시작 프로그램 클래스 :
public void Configuration(IAppBuilder appBuilder)
{
var corsAttr = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*");
var config = new HttpConfiguration();
config.WithWindsorSetup();
config.WithJsonSetup();
config.MapHttpAttributeRoutes(); //Enable Attribute-routing
config.WithSwaggerSetup();
config.EnsureInitialized();
config.EnableCors(corsAttr);
appBuilder.UseWebApi(config);
}
와 나는 새로운 OwenCommunicationListener 만들 여기서
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] {
new ServiceInstanceListener(initParams => new OwinCommunicationListener("", new Startup.Startup(), initParams))
};
}
을 나는 것 매우 클러스터에서 오류가 오류가이 섹션에 알려줍니다 Azure Service Fabric Cluster에 오류없이 배포 할 수 있기를 바랍니다. 좋은 하루 되세요. 도와 줘서 고마워요.
답변 해 주셔서 감사합니다. 이미 내 자신의 사용자 정의 Startup 클래스를 작성하여 OwinCommunicationListener의 새 인스턴스를 만드는 위치에서 사용합니다. 원래 게시물에 코드를 추가했습니다. – ptr