Hello Tomcat developers, I'm Konstantin Preißer, a german student of Computer Science. I'm developing programs with Java and .Net/C#.
Since I have been using Tomcat with IIS (JK ISAPI Connector) for quite some time now, I wondered if it may be an option for the Apache software foundation / Tomcat developers to have an alternative implementation of a IIS <-> Tomcat connector. IIS 7.0 introduced a new module-based request pipeline, which allows to add managed (.Net) and native (C++) modules to the request processing pipeline. A managed module means that it is written in a language of the Microsoft .Net Framework (e.g. C#), which is very similar to Java. Specifically, it is a Class which implements the System.Net.IHttpModule interface, and for example can get called each time a request is made to IIS. It then has access to HttpRequest and HttpResponse objects (like a Java HttpServlet). Since I had some free time today, I decided to try to start an implementation of a IIS-Tomcat connector by creating a managed IIS module, which would intercept requests and send them on a AJP connection to Tomcat. For this, I used the AJP protocol documentation here: http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html I know there's already another implementation of such a module, but it is from another site/organisation and not from Apache. However, I thought it might be good if there's an official Apache implementation of such a IIS module, and I would happily give the complete source and licenses etc. to Apache, if anyone is interested. I started with the implementation today and got now to a point where basic features (redirecting GET/POST requests (with message body) to Tomcat) seems to work well, although, of couse, a lot of features are not yet implemented (logging, configuration, error handling, ...). The code is written in C# (using the .Net Framework 4.0). If you want to take a look at it, you can download the sources from the SVN repo here: https://pleier-it.de:8543/svn/testRepo/trunk/.Net-Projekte/IIS_AJP_Module/ (note that the site uses a self-signed certificate, causing a certificate warnings in browsers). It is a Visual Studio 2010/Framework 4.0 project. If you want to try it on IIS 7.0/7.5/8.0 Beta, you can do the following: 0. Ensure that Tomcat is running with an AJP connector on localhost:8009. Also ensure that you have the .Net Framework 4.0 (Full version) installed, and that the IIS application pool which you would like to try the connector with is using the Framework 4.0 and "Integrated" Managed Pipeline Mode. (You can also try with an earlier version, but I'm not sure if the code will compile there) 1. In your IIS site root directory (e.g. C:\inetpub\wwwroot\), create a folder with the name "App_Code", and copy all *.cs files from the source code into that directory (or a subdirectory). 2. In the IIS manager, click on the site/virtual host where you would like to test the connector, then click on item "Modules". 3. Click on "Add Managed Module...". In the combobox, type "MyModuleNamespace.IisAjpModule.AjpModule" (without quotes) and enter a name for the module in the textbox above. Make sure "Invoke only for requests to ASP.Net managed applications etc" is not selected. Then click OK, and when a Message appears that the type could not be found in referenced libraries, click Yes. 4. Open a browser and goto http://localhost/. You should now see a page served by Tomcat. As I already said, the current code is far from being considered as "finished", but it can demonstrate the principle. (I'm also not sure how exactly the IIS request pipelining works, and if the current way how the module intercepts the request is correct, but at least it seems to work ;) ). I think, compared to the ISAPI approach, there are some advantages and disadvantages of this connector: Advantages: - Easier to maintain. I have looked a bit at the ISAPI code, and as it is C++ code, it is probably somewhat hard to maintain. As I said, for this connector (in the current stage) I only spend one day to read the AJP documentation and to program the module, so it is probably very easy to write a AJP connector this way. :) - Easier to install (you don't have to setup virtual directories etc). Disadvantages: -Probably worse Performance. Although I haven't done any performance tests (and when testing with a normal browser, I didn't notice any performance slowdown), such a managed connector probably has a bit worse performance compared to the ISAPI connector. (However, the current implementation also doesn't use an AJP Connection pool; and you would need to precompile the C# code to a .dll file for optimal performance). Please let me know what you think about it. I won't be disappointed if you aren't interested in it or if there's no requirement for such a connector, but I'm happy for any feedback, and I would also be willing to give the code, licences etc. to the Apache software foundation, if that's possible. Thank you very much for reading this (and replying)! Regards, Konstantin Preißer --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org