WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务

摘要:
播放asp。net时,我发现VS在调试时会启动一个web服务。这也是惊人的。与IIS相比,该服务启动速度如此之快,规模也如此之小。在本地调试时,单击以再次启动web服务。仔细阅读了大神们之前写的文章,经过全面优化,真正的绿色版本终于出现了。它在win8:纯绿色版本下运行得很好,没有任何Microsoft信息。1.修改过程将WebDev.WebServer40.EXE拖到ILSpy.EXE,以反编译到项目中。反编译应用程序的WebDev.WebHost40项目也是如此。删除服务器中对主机的引用,并重新引用刚刚反编译的项目。修改Microsoft.VisualStudio.WebHost.Server中的方法Start()。修改后的代码如下:if{try{this._socketIpv6=this.CreateSocketBindAndListen;}catch{if(例如SocketErrorCode==SocketError.AddressAlreadyUse | |!

       大学玩asp.net时就发现VS在Debug时会起一个web服务WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第1张,这东西也太神奇了服务起得这么快,而相对于IIS又这么渺小。

       前几个月在用phonegap+jqmobi(被inter收购后叫App Framework)做手机应用开发。用dreamweaver CS6的云编译确实挺方便的,但是写代码的话还是比较喜欢VS的代码联想。本地调试时,点击WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第2张又启动了这个web服务。

       再后来要开发一个在WPF嵌入网页的控件,果断用WebBrowser控件简单地封装了一下,这样发现当只是打开本地的html页面时就会弹出安全阻止信息,需要手动点一下允许,度娘的各种改IE设置就是没用,最后发现通过访问web服务返回的页面就不会弹出该提示了。第一反映就是用VS自带的这个来实现,但是托盘会弹气泡等,所以不得不改造下了。

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第3张

 用360查看该端口定位文件

 WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第4张

 WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第5张

151KB,还绿色版,这也太牛了。但是但我用局域网地址进行访问时就发现不可访问,这是为什么呢?有点太可惜了所以就上网找了这个exe的相关资料,有人已经修改了可以局域网访问了,但是他改的东西下载下来报错,于是就决定自己动手进行修改。

仔细阅读之前各位大神写的文章后,综合优化了一下,终于出现了,真正绿色版(.NET 4.0),win8下完美运行:

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第6张

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第7张

纯正绿色版,无任何微软信息

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第8张

1.修改过程


  把WebDev.WebServer40.EXE拖到ILSpy.exe里进行反编译成项目(本人比较支持免费软件)

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第9张

  同样也反编译应用的WebDev.WebHost40成项目

server里对host的引用删了,重新引用刚反编译的项目。

修改Microsoft.VisualStudio.WebHost.Server里的方法Start(),修改的代码如下:

复制代码
if (Socket.OSSupportsIPv6)
            {
                try
                {
                    this._socketIpv6 = this.CreateSocketBindAndListen(AddressFamily.InterNetworkV6, IPAddress.IPv6Any, this._port);
                }
                catch (SocketException ex)
                {
                    if (ex.SocketErrorCode == SocketError.AddressAlreadyInUse || !flag)
                    {
                        throw;
                    }
                }
            }
            if (flag)
            {
                try
                {
                    this._socketIpv4 = this.CreateSocketBindAndListen(AddressFamily.InterNetwork, IPAddress.Any, this._port);
                }
                catch (SocketException)
                {
                    if (this._socketIpv6 == null)
                    {
                        throw;
                    }
                }
            }
复制代码

 Microsoft.VisualStudio.WebHost.RequestTryParseRequest()方法一个判断注释掉

复制代码
private bool TryParseRequest()
        {
            this.Reset();
            this.ReadAllHeaders();
            //if (!this._connection.IsLocal)
            //{
            //    this._connection.WriteErrorAndClose(403);
            //    return false;
            //}
            if (this._headerBytes == null || this._endHeadersOffset < 0 || this._headerByteStrings == null || this._headerByteStrings.Count == 0)
            {
                this._connection.WriteErrorAndClose(400);
                return false;
            }
复制代码

这时候F6编译一下发现 Microsoft.VisualStudio.WebHost.NtlmAuth下的Authenticate()方法报一大堆Fixed关键字错误,做如下修改骗过编译器

复制代码
fixed (SecHandle* lptr = (&this._securityContext))
            {
                IntPtr* ptr = (IntPtr*)lptr;
                fixed (SecBuffer* lptr2 = (&this._inputBuffer))
                {
                    IntPtr* ptr2 = (IntPtr*)lptr2;
                    fixed (SecBuffer* lptr3 = (&this._outputBuffer))
                    {
                        IntPtr* ptr3 = (IntPtr*)lptr3;
                        fixed (byte* lptr4 = (&array[0]))
                        {
                            IntPtr* ptr4 = (IntPtr*)lptr4;
                            fixed (byte* lptr5 = (&array2[0]))
                            {
                                IntPtr* ptr5 = (IntPtr*)lptr5;
                                IntPtr phContext = IntPtr.Zero;
                                if (this._securityContextAcquired)
                                {
                                    phContext = (IntPtr)((void*)ptr);
                                }
复制代码

Microsoft.VisualStudio.WebHost.ConnectionGetHost()方法里加入如下代码(要把WebDev.WebHost40.dll复制到站点目录的bin目录下):

复制代码
lock (this._lockObject)
                {
                    host = this._host;
                    if (host == null)
                    {
                        //复制当前dll到站点目录
                        Assembly myAss = Assembly.GetExecutingAssembly();
                        string assUrl = myAss.Location;
                        if (!File.Exists(this._physicalPath + "\bin\" + myAss.FullName.Split(',')[0] + ".dll"))
                        {
                            if (!Directory.Exists(this._physicalPath + "\bin"))
                            {
                                Directory.CreateDirectory(this._physicalPath + "\bin");
                            }
                            File.Copy(assUrl, this._physicalPath + "bin\" + myAss.FullName.Split(',')[0]+".dll");
                        }
                       
                        string text = (this._virtualPath + this._physicalPath).ToLowerInvariant();
                        string appId = text.GetHashCode().ToString("x", CultureInfo.InvariantCulture);
                        this._host = (Host)this._appManager.CreateObject(appId, typeof(Host), this._virtualPath, this._physicalPath, false);
                        this._host.Configure(this, this._port, this._virtualPath, this._physicalPath, this._requireAuthentication, this._disableDirectoryListing);
                        host = this._host;
                    }
                }
复制代码

最后一步,为WebDev.WebHost40.dll添加签名,不然运行时还是会去加载自带的WebDev.WebHost40.dll

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第18张

编译一下,这样运行WebDev.WebServer40.EXE加载本地路径就可以局域网访问了。

为了简单易用,我用WPF做了窗口来方便WebServer40.EXE启动参数的传递,在传递参数时多加入一个“/silent:true”参数就可以静默运行了。具体怎么启动怎么传参具体我就不说了,参看Process这个类。

 运行如下:

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第19张

WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务第20张

下载地址:http://files.cnblogs.com/tong-tong/TTWebServer.zip

参考文献: http://www.cnblogs.com/huigll/archive/2011/02/25/1851112.html

  

后记


近来在各种房贷、老婆贷的压力下接了各种私活,各种加班,各种被坑,不过数钱时还是比较爽的~~~当今物价都在上涨,唯独工资不涨,那钱都去了哪里了呢???

  

出处:https://www.cnblogs.com/tong-tong/archive/2013/05/02/3049428.html

=======================================================================================

自己在网上找了一个修改好了的,可以直接开箱使用。

下载地址:webserver4.0.zip

免责声明:文章转载自《WebDev.WebServer40.exe改造,自己制作轻量级asp.net网站IIS服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python测试算法运行时间函数C#中使用MATLAB下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wireshark 抓包过滤器使用

wireshark 抓包过滤器 过滤器分为抓包过滤器和显示过滤器,抓包过滤器会将不满足过滤条件的包丢弃,只保留满足条件的包,而显示过滤器则是对已抓取的包做过滤,过滤出满足条件的包。 显示过滤器可以保留全部的报数据,方便后期做流量分析,而抓包过滤器保留的数据有限,后期分析有局限性。 一、抓包过滤器 wireshark抓包是基于其内部的libpcap/wi...

egret 发布ios记录

根据官方文档http://developer.egret.com/cn/github/egret-docs/Native/native/hybrid/hybrid/index.html 将现有的项目发布成Hybird。 发布成功之后,使用xcode打开xcworkspace工程。 然后点击运行按钮。成功调用启动了iphone模拟器,但是内容确实一片空白,即...

nginx 转发请求头信息

nginx 转发请求头信息 让后台接口程序能获取到必要的请求头信息 # 转发host proxy_set_header Host $host; # 转发用户ip proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_f...

Monit:开源服务器监控工具

Monit是一个跨平台的用来监控Unix/linux系统(比如Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,而且非常轻量级(只有500KB大小),并且不依赖任何第三方程序、插件或者库。 Monit可以监控服务器进程状态、HTTP/TCP状态码、服务器资源变化、文件系统变动等等,根据这些变化,可以设定邮件报警、重启进程或服务。易...

Ubuntu 搭建ELK

一、简介 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html 安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x...

Tomcat 下4个配置文件详解

Tomcat 的配置文件由4个 xml 文件构成,context.xml、web.xml、server.xml、tomcat-users.xml 这4个文件。每个文件都有自己的功能与配置方法,下列将逐一介绍这几个文件的配置: 一、context.xml 文件 Context.xml 是 Tomcat 公用的环境配置,tomcat 服务器会定时去扫描这个文件...