1)设置两个不同的包装有什么区别?是否比另一个更受支持?
我有一个使用Nancy.Hosting.Self的项目并没有找到任何关于如何设置Windows身份验证的文章,而我确实找到了Nancy.Owin作为中间件。我现在转到Nancy.owin。
以下是一些不同的问题。
2)jsonformatter可以在nancy bootstrapper中配置,就像在owin端点topshelf中一样。 我应该在哪里配置格式化程序?如果在topshelf owin端点中配置,那么它也会应用在nancy bootstrapper中吗?
3)使用topshelf中的nancy端点,可以选择设置防火墙规则和URL保留。我在owin端点找不到这个。
private static void CreateHost(HostConfigurator host)
{
var logger = SetupLogging();
host.UseSerilog(logger);
host.UseLinuxIfAvailable();
//sc => serviceconfigurator, ls => licenseService
host.Service<WebService>(sc =>
{
sc.ConstructUsing(name => new WebService(_config));
sc.WhenStarted(ls => ls.Start());
sc.WhenStopped(ls => ls.Stop());
sc.OwinEndpoint(app =>
{
app.ConfigureHttp(configuration =>
{
//use json.net serializer
configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());
//configure json settings
var jsonSettings = configuration.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.Formatting = Formatting.Indented;
jsonSettings.Converters.Add(new StringEnumConverter { CamelCaseText = false, AllowIntegerValues = true });
jsonSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
app.ConfigureAppBuilder(builder =>
{
builder.UseNancy(options =>
{
options.Bootstrapper = new Bootstrapper(_config);
//options.PerformPassThrough
});
});
app.ConfigureStartOptions(options =>
{
options.Port = _config.LicenseServicePort;
//options.Urls = new List<string>(){};
});
});
//add host reservation during service install, this is the only time, nancy will have admin rights, will be deleted when service is uninstalled as well.
//nc => nancyConfig
//sc.WithNancyEndpoint(host, nc =>
//{
// nc.AddHost(port: _config.LicenseServicePort);
// nc.CreateUrlReservationsOnInstall();
// nc.DeleteReservationsOnUnInstall();
// nc.OpenFirewallPortsOnInstall(firewallRuleName: "mycustomservice");
// nc.Bootstrapper = new Bootstrapper(_config);
//});
});
host.SetDescription("Licensing service for my api.");
host.SetDisplayName("myservice");
host.SetServiceName("myservice);
host.RunAsNetworkService();
host.StartAutomatically();
}
答案 0 :(得分:0)
发布代码共享答案
private static void CreateHost(HostConfigurator host)
{
Log.Logger = SetupLogging();
host.SetStartTimeout(TimeSpan.FromSeconds(60));
//Plug serilog into host: log startup urls and start / stop
host.UseSerilog(Log.Logger);
//Allow to be run on linux as well
host.UseLinuxIfAvailable();
//sc => serviceconfigurator, ls => licenseService
host.Service<WebService>(sc =>
{
//basic topshelf configuration
sc.ConstructUsing(name => new WebService());
sc.WhenStarted(ls => ls.Start());
sc.WhenStopped(ls =>
{
ls.Stop();
DisposeLogging();
});
//I am using an extension here because I had converted the application from Nancy.Host.Self to Nancy.Owin
//if the extension will not get updated and this breaks the application, convert it to a normal app: see nearly every topshelf + owin example
//owin configuration
sc.OwinEndpoint(app =>
{
app.ConfigureHttp(configuration =>
{
//use json.net serializer
configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());
//configure json settings
var jsonSettings = configuration.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.Formatting = Formatting.Indented;
jsonSettings.Converters.Add(new StringEnumConverter { CamelCaseText = false, AllowIntegerValues = true });
jsonSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
app.ConfigureAppBuilder(builder =>
{
//setup windows authentication
HttpListener listener = (HttpListener)builder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
//setup nancy
builder.UseNancy(options =>
{
options.Bootstrapper = new Bootstrapper(_config);
});
});
//setup urls: always add localhost and 127.0.0.1 together with the host specified in the config file
app.ConfigureStartOptions(options =>
{
options.Port = _config.LicenseServicePort;
var localhost = $"http://localhost:{_config.LicenseServicePort}";
var localhost2 = $"http://127.0.0.1:{_config.LicenseServicePort}";
//todo: this should support https as well
//todo: allow multiple hosts to be specified on config
options.Urls.Add(localhost);
options.Urls.Add(localhost2);
var configuredHost = $"{_config.LicenseServiceUrl}:{_config.LicenseServicePort}";
if (!configuredHost.Equals(localhost) && !configuredHost.Equals(localhost2))
{
options.Urls.Add(configuredHost);
}
});
});
//old nancyhost config, keep this untill documented on confluence
//add host reservation during service install, this is the only time, nancy will have admin rights, will be deleted when service is uninstalled as well.
//nc => nancyConfig
//sc.WithNancyEndpoint(host, nc =>
//{
// nc.AddHost(port: _config.LicenseServicePort);
// nc.CreateUrlReservationsOnInstall();
// nc.DeleteReservationsOnUnInstall();
// nc.OpenFirewallPortsOnInstall(firewallRuleName: "SegreyLicensingService");
// nc.Bootstrapper = new Bootstrapper(_config);
//});
});