HTTP Error 400 - OWIN with Topshelf - asp.net

I've created a windows service using Owin and topshelf.
the application is a WebAPI that listens on port 9000 and I have allowed this port in my firewall rules.
when I executed the .exe file on windows server 2008 I can use it locally(localhost:9000)
but when I try to access it from other machines, I get this error message:
HTTP Error 400. The request hostname is invalid
what am I missing?
please help.

this solved my problem, which might be super obvious to you, but not as much to me.
instead of using this code:
WebApp.Start("http://localhost:8080/");
I had to use this:
WebApp.Start("http://*:8080/");
of course one shouldn't forget to open the port in the firewall too.

Maybe a hosts entry on the remote machine? remember that "localhost" points to the current machine itself. You may need to set up a local IIS server, deploy your WebApi to that, so that other computers can see it.
Incidentelly, there is no way for your ASP.Net development server (Visual Studio's built-in server) to serve other pages than localhost, so you may need to trick it using something like Fiddler or Cassini to act as a route during debug.
There are some related answers to this here:
Can I access ASP.NET Development server in an intranet?
I hope it helps you

Related

ASP.NET5 CLR website on Azure Windows Server 2016 running but giving 404 NOT FOUND in browser

I am trying to run a sample ASP.NET5 MVC application on a Windows Server 2016 instance hosted on Azure. All indicators show that the application runs fine on the server, but when i try to browse the URL (using the server's hostname or public IP) i get a 404. NOT FOUND error.
The ports are open in Azure and in the firewall.
The application runs on Microsoft.Net.Http.Server.Weblistener
The runtime is clr-1.0.0-beta5 x64. I have verified that the runtime is properly installed and is being used.
I have published the app from VS2015 and transferred to the server manually, i run it with the command "web.cmd" which is autogenerated, and i get a neat output saying:
info : [Microsoft.Net.Http.Server.WebListener] Start
info : [Microsoft.Net.Http.Server.WebListener] Listening on prefix: http://localhost:80/
Started
When i run the application in exacly the same way on my local developer machine i get exacly the same output, and it works to browse localhost:80 to get to the website.
This, to me, indicates that
The app runs properly
The ports are configured correctly (when i turn off the webserver i get a different error ERR_CONNECTION_TIMED_OUT instead of the 404)
My guess is that there's something wrong with the WebListener server, not properly routing incoming requests to my application, or perhaps something is wrong with my MVC code (although it works fine on localhost).
Sorry for a rather vague question, i am open to all ideas and input, and please feel free to ask further questions so i can provide more information.
Cheers,
Niko
As #Rob and #Amy pointed out, the problem was that the WebListener only had a binding for the http://localhost:80 address. When i tried to browse it using my server hostname, i got the 404 Not Found.
The solution was to change the --server.urls in hosting.ini from http://localhost:80 to my proper hostname. Also found more information on the answer here:
How to Change Server.Urls with Microsoft.AspNet.Server.WebListener (stackoverflow.com)

call asp.net webservice on localhost

I have been given a task where I have to write some code for an ASP.NET website that also uses a webservice.
The webservice works fine on the webserver, but when i run in debug mode in Visual Studio, I get an access not allowed when calling one of the methods (ip 127.0.0.1).
I need to run in debug mode to look at what the code does...
What to do from here ?
Do I need to do some changes in the host file.
Do I need to install IIS on my PC instead of using the VS local webserver (cassini)
Cassini web server does not allow remote connections. You could use Fiddler to forward traffic on localhost to another port on the same machine for some given requests.
By far the easiest solution is to install IIS on your local machine and run it from there.
Cassini is fine for development and getting something running up very quickl.
But never us it to test things that will go into production on a "real" IIS.
Yes, Microsoft says its completely the same, but running on your localmachine also IIS gives you exactly the same environment as you will have on any live hosting environment.
Sure, its a little bit more work, but developing this way reduces errors and artefacts which may steal you some time.

Why am I getting "The server committed a protocol violation Section-ResponseStatusLine" when debugging my web application?

I have a .NET 1.1 solution where all projects have been upgraded to .NET 4.0 (VS2010, Windows 7). To get past my "Unable to start debugging on the web server" problem, I switched my web application property to use VS Development Server instead of IIS.
When debugging the web application, it launches OK. But I get the above error when I hit a line where I call a web service that's local on my machine. I've seen stuff about adding useUnsafeHeaderParsing=false, but my web.config doesn't have a sytem.net section.
Is it not able to server the web service as well as the web application simultaneously on the application development server? Do I need to get it configured correctly to use IIS7? As a longtime IIS6 user, just looking at it makes my head spin... although, I do have the site and webservices set up within it, and I am fairly certain it worked at one time. Gotta love that.
This worked for me: Text below is comming from This CodePlex Post
This error usually occurs when you have set up Visual Studio to debug
an existing web application running in IIS rather than the built in
ASP.NET debug web server. IIS by default listens for web requests on
port 80. In this case, another application is already listening for
requests on port 80. Typically, the offending application is Skype,
which by default takes over listening on ports 80 and 443 when
installed. Skype is already occupy the port 80. So IIS is unable to
start.
To resolve the issue follow the steps:
- Skype -> Tools -> Options -> Advanced -> Connection:
- Uncheck "Use port 80 and 443 as alternatives for incoming connections".
Its due to Skype has taken default Port 80 or 443 and Default website is stopped.
to solve this issue, close Skype, [Start] Default Website from IIS, (and start skype again if you want.)
you might also try doing an IIS reset

Is There a Way to Make Remote Calls to ASP.NET Development Web Server?

I know that generally speaking, this cant be done, that is get another PC to call a site hosted under the ASP.NET DEvelopment Web Server remotely (generally you can only use localhost:port to get to it).
But I was wondering if anyone has seen, or knows of a way to get around it? I am a RESTful API developer in my office, and I would like the PHP guys to test the APIs on my machine so that I can have the Visual Studio 2005 debugger attached, and I can more easily find problems.
THe main issue is, that my machine is a Vista machine, and unfortunately, the APIs I have developed do not work under IIS7, even Classic Application Pool mode (which eliminates hosting them on a local IIS impossible).
Alternatively, is there a way to use IIS6 on another machine to suite my needs?
Update
Based on the advise that I have gotten and after much trial and error with the suggestions made, I was able to get Squid to act as a reverse-proxy and do exactly what I wanted to do. I have blogged about it http://www.ashleyangell.com/index.php/2009/03/configuring-a-basic-reverse-proxy-in-squid-on-windows-website-accelerator/ in case anyone else wants to do the same thing.
This is substantially easier than the Squid option:
"Accessing the Visual Studio ASP.NET Development Server from iPhone"
Also there is an update that works well under Windows 7, too:
"iPhone Accessing the Visual Studio ASP.NET Development Server - Windows 7 Update"
I have just tried http://code.activestate.com/recipes/483732-asynchronous-port-forwarding/ successfully. It's a Python script that just forwards the traffic.
Assuming the machine your dev server runs on is 192.168.42.42 and the dev server is on port 12345, run the script (on the same machine) with the command line arguments
-l 192.168.42.42 -p 8000 -r 127.0.0.1 -P 12345
From a different machine, you can then access the server via http://192.168.42.42:8000.
Be sure to change sender.handle_close as noted by Dwight Walker in the comments:
def handle_close(self):
self.close()
if len(self.receiver.to_remote_buffer) == 0:
self.receiver.close()
Can't you just run IIS7 in Classic Application Pool mode?
The Development Web Server is strictly limited to Localhost, you would either need to decompile and recompile it, or set up some kind of Proxy on your machine.
And on an unrelated Topic: Even though Win2003 Server SP2 R2 should be supported up to March 2012, maybe IIS7 Support should be added to your application to make sure you can run on 2008 Server as well.
Basically i spent 5 hours making this work, and ultimately if you want a 5 min fix here goes:
1. Port forward incoming traffic to your local ip on your network
TCP Any -> 3127-3128
TCP Any -> 80-81
TCP Any -> 8080
TCP Any -> 8000
TCP Any -> 8888
to
192.1681.1.3 (the local ip of the machine running .NET Dev server.)
2. Download SPI Port Forward
3. Heres the tricky part - Setup 2 forwarding rules as follows:
Local port: 8080 Remote: localhost Remote port 8080
Local port: 8080 Remote: localhost Remote port: .NET Dev server port
Without that second rule the .NET dev server wont serve the page
4. now visit your public IP address at port 8080 -- and you got it
Z
You might want to take a look at UltiDev's version of the Cassini web server. They took the Microsoft Open Source Cassini web server and enhanced it to allow among other things, remote connections.
You can attach VS to the process, and watch your RESTful APIs being called from the PHP application, exactly as you describe above.
Just use a simple Java TCP tunnel. Download this Java app & just tunnel the traffic back. No messing with IIS necessary!
http://jcbserver.uwaterloo.ca/cs436/software/tgui/tcpTunnelGUI.shtml
In command prompt, you'd then run the java app like this... Let's assume you want external access on port 80 and your standard debug environment runs on port 1088...
java -jar tunnel.jar 80 localhost 1088
(Also answered here: Accessing asp. net development server external to VM)
Switching IIS 7 to Classic pipeline does not resolve your compatibility issues?
VS 2005 has a remote debugger, as did many versions before that.
YES THERE IS! :D
I was also looking around to overcome this limitation for some time and accidentally I stumbled upon following article:
http://eeichinger.blogspot.com/2009/12/sniff-http-traffic-with-aspnet.html
I haven't tried it myself yet, but looks quick & simple (although some may say this is hardcore).
BTW. I recommend you look at some other posts at Erich Eichinger's blog, since there's more really valuable stuff.
This post helped me:
http://staticvoidmain.cognitioab.se/index.php/2013/01/remote-debugging-asp-net-development-server-with-spi-port-forward/
It suggests using a third-party application on your developer machine to act as a proxy (sort of). So you connect to this app, and it forwards all your requests to the development server. Works like magic :)

Can I access ASP.NET Development server in an intranet?

Im testing an ASP.NEt site. When I execute it, it starts the ASP.NET Development Server and opens up a page.
Now I want to test it in the intranet I have.
Can I use this server or I need to configure IIS in this machine?
Do I need to configure something for it to work?
I've changed the localhost to the correct IP and I opened up the firewall.
Thanks
Yes you can! And you don't need IIS
Just use a simple Java TCP tunnel. Download this Java app & just tunnel the traffic back.
http://jcbserver.uwaterloo.ca/cs436/software/tgui/tcpTunnelGUI.shtml
In command prompt, you'd then run the java app like this... Let's assume you want external access on port 80 and your standard debug environment runs on port 1088...
java -jar tunnel.jar 80 localhost 1088
(Also answered here: Accessing asp. net development server external to VM)
No, you can't. It's set up so it only works on localhost, and I couldn't find any workarounds to make it work.
But, here's what I've been doing - I created the website on a specific port in IIS and opened that port up so it's visible on the network. I pointed that IIS website to my website's root folder (the one with web.config in it). Then I continued to use the ASP.NET Development server on that local machine while developing - both IIS and the ASP.NET Development Server can access the files at the same time (unless you're doing something wacky).
Let me know if there's a challenge with running IIS on your machine and I'll update my answer.
I realize this isn't a direct answer to your question, but an alternative to debugging using the ASP development server is to attach to the IIS process: How do I attach the debugger to IIS instead of ASP.NET Development Server?
Nope, stupidly (IMHO) there's no way to get the default ASP.net development server to serve pages to IPs other than localhost. What I did was to use UltiDev Cassini which is very quick to set up and is basically a version of the ASP.net development server compiled by UltiDev, and it will serve pages to any IP address.
Just for those who don't want/cant set up IIS for whatever reason...
Use fiddler or similar on your host - set your browser on the client VM to use the proxy then just use localhost:dev_port as usual on the client.
All requests from the client goto the proxy on your dev machine which routes to localhost on the dev machine and the ASP.net dev server thinks the request is from your dev machine!
You can recompile Cassini to get it to work - there's a fairly easy to remove check for localhost in there. Or, I'm pretty sure Ultidev's Cassini doesn't have this restriction. Both of these are easier to setup than IIS.
But, yeah, the builtin WebDev.WebServer doesn't work....Hmm, unless you run something like AnalogX's Proxy on your dev box and point it to the WebDev port. That should work (though I haven't tried it, it should take < 2 mins to setup).
You can use Cassini to expose your web apps externally. You just need to proxy the connection. I wrote a simple program to do this that you can run in another VS instance. Just change the port to match the port Cassini is using.
https://gist.github.com/945649
You can do port redirection using SOAP Toolkit 3.0
Once installed, go to My Programs > Microsoft Soap Toolkit 3 > Trace Utility
Once Trace Utility opened, go to File > New > Formatted Trace
In the dialog insert your ASP .NET Development Server port in Forward To Destination Port field.
It's only a workaround for testing purposes
I believe the built in ASP.NET server only works on localhost. You'll have to use IIS.
Compile all you website in Debug mode, then create the website and publish it in IIS (make sure you can view it from other machine). Then attach the VS2010 Debugger to the process with the AppPool of your website (the process is called w3wp.exe when IIS>v5 and aspnet_wp.exe when IIS<5).
If you make some changes, just replace the package contents on the physical path of the website, and there you go again.

Resources