Browse Source

Change how ports work for local ASP.NET Core apps

Instead of using the ports in launchSettings.json we'll now just ignore them.

This means that ports get auto-assigned when they are not specified in
tye.yaml. This avoid the conflict when multiple default asp.net core applications
are used - so as a result, tye.yaml isn't needed in as many situations.
davidfowl/dependencies
Ryan Nowak 7 years ago
parent
commit
f39b4596f3
  1. 1
      src/Tye.Hosting/Model/ServiceBinding.cs
  2. 14
      src/Tye.Hosting/ProxyService.cs
  3. 1
      src/tye/ConfigModel/ConfigApplication.cs
  4. 5
      src/tye/ConfigModel/ConfigFactory.cs
  5. 1
      src/tye/ConfigModel/ConfigServiceBinding.cs

1
src/Tye.Hosting/Model/ServiceBinding.cs

@ -8,6 +8,7 @@ namespace Tye.Hosting.Model
{ {
public string? Name { get; set; } public string? Name { get; set; }
public string? ConnectionString { get; set; } public string? ConnectionString { get; set; }
public bool AutoAssignPort { get; set; }
public int? Port { get; set; } public int? Port { get; set; }
public int? InternalPort { get; set; } public int? InternalPort { get; set; }
public string? Host { get; set; } public string? Host { get; set; }

14
src/Tye.Hosting/ProxyService.cs

@ -59,11 +59,16 @@ namespace Tye.Hosting
foreach (var binding in service.Description.Bindings) foreach (var binding in service.Description.Bindings)
{ {
if (binding.Port == null) if (binding.Port == null && !binding.AutoAssignPort)
{ {
continue; continue;
} }
if (binding.Port == null)
{
binding.Port = GetNextPort();
}
if (service.Description.Replicas == 1) if (service.Description.Replicas == 1)
{ {
// No need to proxy // No need to proxy
@ -80,7 +85,12 @@ namespace Tye.Hosting
ports.Add(port); ports.Add(port);
} }
_logger.LogInformation("Mapping external port {ExternalPort} to internal port(s) {InternalPorts} for {ServiceName}", binding.Port, string.Join(", ", ports.Select(p => p.ToString())), service.Description.Name); _logger.LogInformation(
"Mapping external port {ExternalPort} to internal port(s) {InternalPorts} for {ServiceName} binding {BindingName}",
binding.Port,
string.Join(", ", ports.Select(p => p.ToString())),
service.Description.Name,
binding.Name ?? binding.Protocol);
service.PortMap[binding.Port.Value] = ports; service.PortMap[binding.Port.Value] = ports;

1
src/tye/ConfigModel/ConfigApplication.cs

@ -60,6 +60,7 @@ namespace Tye.ConfigModel
{ {
ConnectionString = binding.ConnectionString, ConnectionString = binding.ConnectionString,
Host = binding.Host, Host = binding.Host,
AutoAssignPort = binding.AutoAssignPort,
InternalPort = binding.InternalPort, InternalPort = binding.InternalPort,
Name = binding.Name, Name = binding.Name,
Port = binding.Port, Port = binding.Port,

5
src/tye/ConfigModel/ConfigFactory.cs

@ -157,7 +157,10 @@ namespace Tye.ConfigModel
var uri = new Uri(address); var uri = new Uri(address);
service.Bindings.Add(new ConfigServiceBinding() service.Bindings.Add(new ConfigServiceBinding()
{ {
Port = uri.Port, // Don't use ports from launch profiles. These are very likely to be the same defaults (5000, 5001)
// that were generated when the project was created, and so they will almost always conflict
// between multiple apps.
AutoAssignPort = true,
Protocol = uri.Scheme Protocol = uri.Scheme
}); });
} }

1
src/tye/ConfigModel/ConfigServiceBinding.cs

@ -8,6 +8,7 @@ namespace Tye.ConfigModel
{ {
public string? Name { get; set; } public string? Name { get; set; }
public string? ConnectionString { get; set; } public string? ConnectionString { get; set; }
public bool AutoAssignPort { get; set; }
public int? Port { get; set; } public int? Port { get; set; }
public int? InternalPort { get; set; } public int? InternalPort { get; set; }
public string? Host { get; set; } public string? Host { get; set; }

Loading…
Cancel
Save