Skip to content

IISHttpServer populates IServerAddressesFeature.Addresses with non-http addresses #30792

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
mconnew opened this issue Mar 10, 2021 · 8 comments
Labels
area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions bug This issue describes a behavior which is not expected - a bug. help candidate Indicates that the issues may be a good fit for community to help with. Requires work from eng. team
Milestone

Comments

@mconnew
Copy link
Member

mconnew commented Mar 10, 2021

Describe the bug

When hosting an ASP.NET Core app in IIS using InProcess hosting, when getting the list of addresses from the IServerAddressesFeature feature, it includes non-http addresses if IIS is configured to use non-http bindings such as net.tcp.

To Reproduce

Default hello world asp.net core app configured to use IIS in process hosting. Install non-http transport WCF transport support in Windows .NET features.
image

Configure IIS to have non-http bindings.
image

Get the addresses:

IServer server = _serviceProvider.GetRequiredService<IServer>();
IServerAddressesFeature addresses = server.Features.Get<IServerAddressesFeature>();

The addresses collection will contain the addresses:

  • http://*:80/APPPATH
  • net.tcp://*:*APPPATH
  • net.pipe://:/APPPATH

Even though I didn't list it here, the net.msmq address is likely to also show up in the list if enabled in IIS.

Exceptions (if any)

Only get an exception when trying to parse with Uri, but that's an issue with my code presuming all addresses are http[s]

Further technical details

  • ASP.NET Core version : 2.1
  • Include the output of dotnet --info
  • The IDE (VS / VS Code/ VS4Mac) you're running on, and its version: 16.9.0
.NET SDK (reflecting any global.json):
 Version:   5.0.200
 Commit:    70b3e65d53

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.19042
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\5.0.200\

Host (useful for support):
  Version: 5.0.3
  Commit:  c636bbdc8a

.NET SDKs installed:
  2.1.813 [C:\Program Files\dotnet\sdk]
  2.2.401 [C:\Program Files\dotnet\sdk]
  2.2.402 [C:\Program Files\dotnet\sdk]
  3.0.103 [C:\Program Files\dotnet\sdk]
  3.1.112 [C:\Program Files\dotnet\sdk]
  5.0.103 [C:\Program Files\dotnet\sdk]
  5.0.200 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.All 2.1.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.25 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.12 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
@shirhatti
Copy link
Contributor

Does anything break at runtime? (Maybe HttpsRedirectionMiddleware?)

@shirhatti shirhatti added area-servers feature-iis Includes: IIS, ANCM labels Mar 10, 2021
@mconnew
Copy link
Member Author

mconnew commented Mar 10, 2021

CoreWCF breaks, so I'm putting in a workaround.

@BrennanConroy
Copy link
Member

This seems like the expected behavior. The server is listing the addresses associated with it.

Does configuring Kestrel with these bindings have the same behavior?

@mconnew
Copy link
Member Author

mconnew commented Mar 10, 2021

@BrennanConroy, are you saying that ASP.NET Core can dispatch Net.Tcp and Net.Pipe requests when hosted in IIS? I would be very surprised if that's the case as you need a .NET Core implementation of the WCF binding NetNamedPipe to communicate with SMSvcHost in order to dispatch requests from those addresses, and NetNamedPipe binding doesn't exist yet on .NET Core. Kestrel doesn't know anything about Net.Tcp or Net.Pipe so can't bind to those.

@BrennanConroy
Copy link
Member

Simple fix would be to make IISServer filter the collection. We don't want to do this.

We could also consider a design for something like registering server address types based on available transports. Lets just trust the user/transports.

We need to fix BindingAddress to support wildcards.

We don't want to hide server addresses from the feature so we'll keep them and just fix the BindingAddress class.

@BrennanConroy BrennanConroy added bug This issue describes a behavior which is not expected - a bug. and removed feature-iis Includes: IIS, ANCM labels Mar 12, 2021
@BrennanConroy BrennanConroy added this to the Backlog milestone Mar 12, 2021
@ghost
Copy link

ghost commented Mar 12, 2021

We've moved this issue to the Backlog milestone. This means that it is not going to be worked on for the coming release. We will reassess the backlog following the current release and consider this item at that time. To learn more about our issue management process and to have better expectation regarding different types of issues you can read our Triage Process.

@BrennanConroy BrennanConroy added the help wanted Up for grabs. We would accept a PR to help resolve this issue label Mar 12, 2021
@mconnew
Copy link
Member Author

mconnew commented Mar 12, 2021

@BrennanConroy, are you saying that even though the IIS IServer can't handle the other transports, that there's still benefit in exposing them to application code?

@davidfowl
Copy link
Member

Filtering here feels like the wrong behavior. I think it's less to do with how the server binds and more to do with round tripping user specified information.

@amcasey amcasey added area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed area-runtime labels Aug 24, 2023
@mkArtakMSFT mkArtakMSFT added help candidate Indicates that the issues may be a good fit for community to help with. Requires work from eng. team and removed help wanted Up for grabs. We would accept a PR to help resolve this issue labels Oct 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions bug This issue describes a behavior which is not expected - a bug. help candidate Indicates that the issues may be a good fit for community to help with. Requires work from eng. team
Projects
None yet
Development

No branches or pull requests

7 participants
@davidfowl @shirhatti @BrennanConroy @mconnew @amcasey @mkArtakMSFT and others