2008年11月19日

原文:http://www.cnblogs.com/tuyile006/archive/2007/06/14/783384.html

 

WebService方面:

在webService项目中新建两个类访问性都为public
request:用来存放请求参数;

public class request
{
    
public request()
    {
    }
    
public string name;
    
public string sex;
    
public int age;
    
public string enable;
}


response:用来存放应答参数;

public class response
{
 
public response()
 {
  
 }
    
public string name2;
    
public string sex2;
    
public int age2;
    
public bool marry;
}


在webService中使用方法:

[WebMethod(Description = "real test")]
    
public response change(request re)
    {
        response resp 
= new response();
        resp.name2 
= re.name + "2";
        resp.sex2 
= re.sex + "2";
        resp.age2 
= re.age + 2;
        resp.marry 
= false;
        
return resp;
    }


这个方法测试接收多个参数,并改变其值后返回多个参数


在Web项目中调用WebService:


添加webService的引用,假设引用名为localhost,使用该webService的方法如下:
客户端不用再另加request和response两个类。

        localhost.request re = new localhost.request();
        re.name 
= "aa";
        re.sex 
= "man";
        re.age 
= 12;
        re.enable 
= "true";
        localhost.Service ser 
= new localhost.Service();
        localhost.response res 
= ser.change(re);
        Response.Write(res.name2
+"<br>"+res.sex2+"<br>"+res.age2.ToString()+"<br>"+res.marry.ToString());


关于调用webservice时出现401错误:Access Denied 
解决办法:将webservice的访问权限加上“允许匿名访问”,在webService属性的“目录安全性”选项卡中。

posted @ 2008-11-19 11:08 Jwin 阅读(11) | 评论 (0)编辑
  2008年10月28日

原文:http://www.cnblogs.com/cnaspnet/archive/2008/09/23/716881.html

 

在程序部署上经常遇到一个问题,为了安全,速度,一般都是把数据库和程序分开放在不同的服务器.一般对外一台服务器就够了,其它如果想对外,通过这台对外服务器就可以实现.

刚不久在做一个项目遇到了一个问题,程序所在的服务器空间小,另外购置了一台数据服务器(存储数据库及文件).程序里多个地方用到了附件上传,一般上传文件都放在程序目录下.可这次不一样,要放在另外一台服务器.
开始时我觉得很简单,只要建立网络映射不就可以了吗?只要有足够的权限,和操作本机盘有什么区别呢?

以前也做过这方面,用的是.net winform汇总excel,当时一点问题都没有.这次是webform,问题来了,程序根本找不到.
这下好了,想了好多方面还是没有解决,在网上也没搜索到,于是在CSDN中发了请求帖,终于解决.
http://community.csdn.net/Expert/topic/5470/5470471.xml?temp=.5512812

摘要如下:

简单的测试虚拟目录设置是否正确!
假设A是你web站点的服务器 B是你要上传文件的服务器
1、在B服务器上共享一个文件夹upload,并设置好权限 开设用户test 密码123456 并给予test对upload的写入权限,同时在该文件夹里放入一个简单的页面,随便什么都行,输出几个字母就可以了【B服务器上的操作over】
2、在A服务器web站点下面建立一个虚拟目录,默认加虚拟目录的时候是没得选择其他服务器的共享文件夹的,你先随便选择一个本地的路径,建立好之后,点击该虚拟目录的属性,在更改本地路径的上面,有3个选择,你选择“另一台计算机上的共享”,接着设置网络路径,格式是这样的:\\{服务器}\{共享名},{服务器}用IP来代替,{共享名}就是那个upload文件夹,填好之后点击后面的“连接用户”,输入刚才在B服务器上用户test 和密码123456(当然,简单一点,你最好先测试一下,确定A服务器能访问B服务器共享的文件夹,如果A都不能访问B的共享,那你先解决这个问题先,测试的方法很简单,在浏览器里输入\\B服务器的IP\upload,如果能输入用户和密码之后能看到你刚才随便建的那个文件,OK,共享是可以访问的)
3、虚拟目录设置好了之后,你可以测试一下,在A的web站点下面通过程序获取一下虚拟目录的路径,如果是成功的,路径应该是服务器B的IP+upload文件夹。
4、接下来的工作就是上传文件了,这个时候你直接上传应该都是可以的,应该你刚才已经输入过访问B服务器upload的帐号和密码,也就是说A和B已经建立了信任连接,不过如果你重启服务器,刚才建立的连接也就不存在了。所以在A服务器web站点的Global.asax文件里加载一句话,让A服务器站点启动的时候就和B建立信任连接
System.Diagnostics.Process.Start("net.exe", "use \\\\B服务器的IP\\upload \"123456\" /user:\"test\"");  
上面的语句就是建立信任连接的,放在global.asax的好处就是站点启动就建立连接,因为这种信任连接是可持续性的,不会象session一样过期,只有在重启A服务器的时候这种信任连接才会消失。

不晓得你明白没有?不过我可以肯定,这个是可以实现的,因为我刚刚做过这块。
后话:至于上传到B服务器上的文件怎么访问,那就比较方便了。
一种方式:还是通过A服务器web站点下面的虚拟目录来访问,这种情况下,B服务器只是提供空间
另一种方式:在B服务器上建立一个站点,指向该目录,这样B服务器分担了访问文件时IIS的工作任务

 

文件上传保存:
SaveAs(Server.MapPath("abc") + "\\" + filePath.Substring(filePath.LastIndexOf("\\") + 1));
//abc为程序运行站点或者虚拟目录下的虚拟目录

文件浏览:
DownloadFile(Server.MapPath("abc") + "//abc.txt");
//abc.txt为B服务器上的文件

 

        private void DownloadFile(string physicalFilePath)
        
{
            FileStream stream 
= null;
            
try
            
{
                stream 
= new FileStream(physicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                
int bufSize = (int)stream.Length;
                
byte[] buf = new byte[bufSize];

                
int bytesRead = stream.Read(buf, 0, bufSize);
                HttpContext.Current.Response.ContentType 
= "application/octet-stream";
                
//attachment是以附件的形式下载,也可以改为online在线找开. 
                HttpContext.Current.Response.AppendHeader("Content-Disposition""attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(physicalFilePath), System.Text.Encoding.UTF8));
                HttpContext.Current.Response.OutputStream.Write(buf, 
0, bytesRead);
                HttpContext.Current.Response.End();
            }

            
finally
            
{
                stream.Close();
            }

        }
 

 

 

posted @ 2008-10-28 09:49 Jwin 阅读(9) | 评论 (0)编辑
  2008年10月5日
 

博客园相关文章功能中使用了memcached,在网上搜集了一些memcached方面的文章:

memcached完全剖析

分布式缓存系统Memcached简介与实践

Memcached深度分析

自己实现memcached客户端库

Memcached使用点滴

posted @ 2008-10-05 18:05 Jwin 阅读(35) | 评论 (0)编辑
  2008年8月17日
 

asp.net中:
global.asax.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;

namespace alumniV2
{
 /// <summary>
 /// Global 的摘要说明。
 /// </summary>
 public class Global : System.Web.HttpApplication
 {
  public Global()
  {
   InitializeComponent();
  } 
  
  protected void Application_Start(Object sender, EventArgs e)
  {
   Application.Lock ();
   
   Application["usernum"]=0;
   Application["onlineuser"]="";   
   Application["guestnum"]=0;

   Application.UnLock ();
  }
 
  protected void Session_Start(Object sender, EventArgs e)
  {
   Application.Lock ();

   Application["guestnum"]=(Int32)Application["guestnum"]+1;

   Application.UnLock ();
  }

  protected void Application_BeginRequest(Object sender, EventArgs e)
  {

  }

  protected void Application_EndRequest(Object sender, EventArgs e)
  {

  }

  protected void Application_AuthenticateRequest(Object sender, EventArgs e)
  {

  }

  protected void Application_Error(Object sender, EventArgs e)
  {

  }

  protected void Session_End(Object sender, EventArgs e)
  {
   Application.Lock ();
   string name;
   if (Request.Cookies ["personal"]!=null )
   {
    name=Request.Cookies ["personal"]["username"] ;
    if (name!="")
    {
      Application["usernum"]=(Int32)Application["usernum"]-1;

      Application["onlineuser"]=(Application["onlineuser"]+"").Replace (name+"$","");

    }
    else
     Application["guestnum"]=(Int32)Application["guestnum"]-1;
   }
   else
    Application["guestnum"]=(Int32)Application["guestnum"]-1;
   Application.UnLock ();
  }

  protected void Application_End(Object sender, EventArgs e)
  {
   Application.Lock ();
   
   Application["usernum"]=0;
   Application["onlineuser"]="";   
   Application["guestnum"]=0;

   Application.UnLock ();
  }
   
  #region Web Form Designer generated code
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
  }
  #endregion
 }
}

index.aspx.cs

  private void ShowOnlineUser()
  {
   onlinenum.Text ="  当前共有 <font color=red>"+ Application["usernum"] +"</font>  个成员 <font color=red>"+ Application["guestnum"] +"</font>  个客人在线   <img src='images/user.gif'> <font color=red>成员</font>   <img src='images/guest.gif'> 客人 ";

   string oluserstr;
   string []oluser;
   int n;
   oluserstr="";
   if (Application["onlineuser"]!=null)
   {
    //oluser1=;
    oluser=(Application["onlineuser"]+"").Split('$');
    for (n=0;oluser[n]!="" && oluser[n]!=null;n++)
     oluserstr=oluserstr+"  <img src='images/user.gif'> <a href='myinfo.aspx?username="+Server.UrlEncode(oluser[n])+"'><font color=red>"+oluser[n]+"</font></a> ";
   }
    
   if (Application["guestnum"]!=null)
   {
    for (n=0;n<(Int32)Application["guestnum"];n++)
     oluserstr=oluserstr+"  <img src='images/guest.gif'> 客人 ";
   }
   onlineuser.Text =oluserstr;
  }

posted @ 2008-08-17 10:53 Jwin 阅读(320) | 评论 (0)编辑
  2007年12月7日
如果你是sql server 2005数据库优化方面的专家并有多年的千万数量级别的优化经验,请往继续往下看。

工作内容:优化约5张表结构,优化约10个常用存储过程。
工作周期:1个星期
要求:提供优化前和优化后的对比测试报告、测试数据以及相关说明。

联系方式:42731209(qq)、sunlan123@126.com(email)

深圳地区优先,最好能提供上门服务。

大家联系我的时候,最好能先用简单的几句话描述一下你做过的数据库优化工作。
posted @ 2007-12-07 12:03 Jwin 阅读(423) | 评论 (9)编辑

有意思,遂转贴:)

1.250定律
  拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意 味着得罪了250 名顾客。   在你的网站访客中,一个访客可能可以带来一群访客,任何网站都有起步和发展的过程,这个过程中此定律尤其重要。
2.达维多定律
  达维多认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。   国内网站跟风太严重,比如前段时间的格子网,乞讨网,博客网,一个成功了,大家一拥而上。但实际效果是,第一个出名的往往最成功,所以在网站的定位上,要 动自己的脑筋,不是去捡人家剩下的客户。同理,买人家出售的数据来建站效果是很糟糕的。
3.木桶定律
  水桶定律是指,一只水桶能装多少水,完全取决于它最短的那块木板。这就是说任何一个组织都可能面临的一个共同问题,即构成组织的各个部分往往决定了整个组 织的水平。   注意审视自己的网站,是速度最糟糕?美工最糟糕?宣传最糟糕?你首先要做的,不是改进你最强的,而应该是你最薄弱的。
4.马太效应
  《新约》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说: “主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。” 于是国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆 人的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。   在同类网站中,马太效应是很明显的。一个出名的社区,比一个新建的社区,更容易吸引到新客户。启示是,如果你无法把网站做大,那么你要做专。作专之后再做 大就更容易。
5.手表定理
  手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。
  一个网站,你只需要关注你特定的用户群需求。不要在意不相干人的看法。
6.不值得定律
  不值得定律:不值得做的事情,就不值得做好   不要过度seo,如果你不是想只做垃圾站。不要把时间浪费在美化再美化页面,优化再优化程序,在你网站能盈利后,这些事情可以交给技术人员完成。
7.彼得原理
  劳伦斯.彼得认为:在各种组织中,由于习惯于对在某个等级上称职的人员进行晋升提拔,因而雇员总是趋向于晋升到其不称职的地位。
  不要轻易改变自己网站的定位。如博客网想变门户,盛大想做娱乐,大家拭目以待吧。
8.零和游戏原理
  当你看到两位对弈者时,你就可以说他们正在玩“零和游戏”。因为在大多数情况下, 总会有一个赢,一个输,如果我们把获胜计算为得1分,而输棋为-1分,那么,这两人得分之和就是:1+(-1)=0   不要把目光一直盯在你的竞争网站上,不要花太多时间抢它的访客。我们把这些时间用来寻找互补的合作网站,挖掘新访客。
9.华盛顿合作规律
  华盛顿合作规律说的是: 一个人敷衍了事,两个人互相推诿, 三个人则永无成事之日。   如果你看准一个方向,你自己干,缺人手就招。不要轻易找同伴一起搞网站,否则你会发现,日子似乎越过越快了,事情越做越慢了。
10.邦尼人力定律
  一个人一分钟可以挖一个洞,六十个人一秒种却挖不了一个洞。合作是一个问题,如何合作也是一个问题。
  你需要有计划。
11.牛蛙效应
  把一只牛蛙放在开水锅里,牛蛙会很快跳出来;但当你把它放在冷水里,它不会跳出来,然后慢慢加热,起初牛蛙出于懒惰,不会有什么动作,当水温高到它无法忍 受的时候,想出来,但已经没有了力气。   如果你是soho,注意关注你的财务。不要等到没钱了再想怎么挣,你会发现那时候挣钱更难。
12.蘑菇管理
  蘑菇管理是许多组织对待初出茅庐者的一种管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)。
  做网站毕竟要遭遇这样的阶段,搜索引擎不理你,友情链接找不到,访客不上门。这是磨练。
13.奥卡姆剃刀定律
  如无必要,勿增实体。
  把网站做得简单,再简单,简单到非常实用,而不是花俏。google的首页为什么比雅虎好?
14.巴莱多定律(Paredo 也叫二八定律)
  你所完成的工作里80%的成果,来自于你20%的付出;而80%的付出,只换来20%的成果。
  随时衡量你所做的工作,哪些是最有效果的。
1.马蝇效应
  林肯少年时和他的兄弟在肯塔基老家的一个农场里犁玉米地,林肯吆马,他兄弟扶犁,而那匹马很懒,慢慢腾腾,走走停停。可是有一段时间马走得飞快。 林肯感到奇怪,到了地头,他发现有一只很大的马蝇叮在马身上,他就把马蝇打落了。看到马蝇被打落了,他兄弟就抱怨说:"哎呀,你为什么要打掉它,正是那家 伙使马跑起来的嘛!"   在你心满意足的时候,去寻找你的马蝇。没有firefox,不会有ie7,firefox就是微软的马蝇之一。马蝇不可怕,怕的是会一口吃掉你的东西,像 ie当初对网景干的那样。
2.最高气温效应
  每天最热总是下午2 时左右,我们总认为这个时候太阳最厉害,其实这时的太阳早已偏西,不再是供给最大热量的时候了。此时气温之所以最高,不过是源于此前的热量积累。
  你今天的网站流量,是你一个星期或更长时间前所做的事带来的。
3.超限效应(溢出效应)
  刺激过多、过强和作用时间过久而引起心理极不耐烦或反抗的心理现象,称之为“超限效应”。 别到别人论坛里发太多广告。别在自己网站上放太多广告。别在自己的论坛里太多地太明显地诱导话题。
4.懒蚂蚁效应
   生物学家研究发现,成群的蚂蚁中,大部分蚂蚁很勤劳,寻找、搬运食物争先恐后,少数蚂蚁却东张西望不干活。当食物来源断绝或蚁窝被破坏时,那些勤快的蚂 蚁一筹莫展。“懒蚂蚁”则“挺身而出”,带领众伙伴向它早已侦察到的新的食物源转移。   不要把注意力仅仅放在一个网站上,即使这个网站现在为你带来一切。你要给自己一些时间寻找新的可行的方向,以备万一。
5.长尾理论
  ChrisAnderson认为,只要存储和流通的渠道足够大,需求不旺或销量不佳的产品共同占据的市场份额就可以和那些数量不多的热卖品所占据的市场份 额相匹敌甚至更大。   对于搜索引擎,未必你需要一个热门词排在第一位,如果有一千个冷门词排在第一位,效果不但一样,还会更稳定更长远。
6.破窗理论
  栋建筑上的一块玻璃,又没有及时修好,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃。   管理论坛时,如果你发现第一个垃圾贴,赶紧删掉他吧。想想:落伍现在为什么那么多××贴?现在控制比最初控制难多了。
7.“羊群效应”,又称复制原则(Copy Strategy)
  一个羊群(集体)是一个很散乱的组织,平时大家在一起盲目地左冲右撞。如果一头羊发现了一片肥沃的绿草地,并在那里吃到了新鲜的青草,后来的羊群就会一哄而上,争抢那里的青草,全然不顾旁边虎视眈眈的狼,或者看不到其它地方还有更好的青草。
  不要轻易跟风,保持自己思考的能力。
8.墨菲定律
  如果坏事情有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失。
  除非垃圾站,否则不要作弊,对搜索引擎不要,对广告也不要。
9.光环效应
  人们对人的某种品质或特点有清晰的知觉,印象比较深刻、突出, 这种强烈的知觉, 就像月晕形式的光环一样,向周围弥漫、扩散,掩盖了对这个人的其他品质或特点的认识。
  不要轻易崇拜一个人或者公司、一个概念、一种做法。
10.蝴蝶效应
  一只亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,两周后,可能在美国德克萨斯州引起一场龙卷风。
  不管你做什么,网站或者其他,你都应该关注新闻。机遇或者灾难可能就在那。
11.阿尔巴德定理
  一个企业经营成功与否,全靠对顾客的要求了解到什么程度。   我赞同别人的点评:看到了别人的需要,你就成功了一半;满足了别人的需求,你就成功了全部。
  尤其是做网站。
12.史密斯原则
  如果你不能战胜他们,你就加入到他们之中去。  
  不要试图做孤胆英雄。如果潮流挡不住,至少,你要去思考为什么。

posted @ 2007-12-07 11:12 Jwin 阅读(168) | 评论 (2)编辑
  2007年12月3日

早上还是好好的ajax 程序,下午编译了一下再测试,发现出现了脚本错误 'sys'未定义,什么原因?
<script src="/Web/ScriptResource.axd?d=8OVGrFRbNqbg1Ow8NplOosTT-_lmcv8H7p7wJcB0eix8wutLE3voKz3gUoQZ7KvyOoGu1I6RgyzVVgzpeEIsa_sFZ3h2jJD4pMu6xNOVD6g1&amp;t=633080997725672088" type="text/javascript"></script>
在IE中存入URL,出现下面的提示:

Specified argument was out of the range of valid values.
参数名: utcDate
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
参数名: utcDate

什么原因导致的错误?琢磨了半天,把之前的改动改了回去,问题依然存在。后来baidu和google了半天,发现有人和我出现了同样的问题。为了测试一个项目,中午的时候,将电脑的时间改成2007-3-3(现在的时间:2007-12-3),结果导致了错误,将时间改回来,马上正常,ft!为什么ajax会出现这个问题?闷!

posted @ 2007-12-03 20:20 Jwin 阅读(121) | 评论 (0)编辑
  2007年11月24日

项目开发需求:开发qq机器人(类似msn机器人),添加为好友后,可以实现信息查询和信息发布等功能,类似http://fanfou.com/的qq机器人。

大致需求:
1、机器人能接受对方加为好友
2、机器人能接收对方发来的信息,并能回复
3、能实时获取到好友签名档变化

开发平台:.net framework 2.0(c#)+sql server 2005

项目周期:一个月

价格:价格优,双方协定!
联系:42731209

有兴趣和能力的高手,速和我联系,最好在深圳。

posted @ 2007-11-24 21:44 Jwin 阅读(624) | 评论 (0)编辑
  2007年11月21日
    使用博客园有一段时间,但一直非常忙,没有写多少原创性的文章,实在抱歉。好,言归正传,结合我们实际的应用经验,谈谈关于博客园程序主页模板改进的思路和建议。我们网站(http://www.yupsky.com/)使用博客园程序有一年多时间了,对个人博客这块程序,做了较大的改动,尤其更换主页模板,现将心得分享如下。

博客园程序主页模板存在的主要问题:
1)使用了大量的 User Control,程序更新或内存回收的时候,编译速度过慢,影响整个系统的性能。
2)程序和美工没有分离。这样导致的直接问题是,要做一套新模板非常麻烦,既要懂程序,又要懂美工。就算程序员和美工合作,也非常麻烦,要反复调试。
3)不够标准化和统一,不方便用户自定义。模板结构的随意性太大,没有统一布局和标识(div、class),导致css重复使用率低,不能很好通用,增加了用户自定义的难度和积极性。

改进建议:模板=布局PageTemplate(User Control)+skin(css、images)的模式(我们的经验)
1)使用统一的布局文件PageTemplate.ascx,可以定义多个布局(左右、右左、左中右等),所有的皮肤skin共用这几个布局,而不是像之前那样,每个皮肤skin独立使用一个布局文件PageTemplate.ascx。这样做的好处,可以通过统一的PageTemplate去调用相关的User Control,而不用每个skin都重复大量的User Control,可以大大增强系统性能,方便维护。
2)由于1)中布局文件PageTemplate.ascx与皮肤skin进行分离,skin中不再存在User Control,一个skin包含的文件只有css+images。这样不懂程序的美工,也可以轻而易举的开发一套新的模板。
3)由于布局与皮肤的分离,所有skin的css代码都是通用的,可以应用到不同的模板上面去。非常适合用户自定义。(我们网站上面的用户都是10多岁的,都会使用。)


    很少写东西,不知道是否将问题讲清楚,不清楚可以和我保持联系。希望这篇文章对所有使用博客园程序(Dottext)的站长有所帮助。



posted @ 2007-11-21 10:50 Jwin 阅读(1567) | 评论 (23)编辑
  2007年11月15日
原文出处:http://blog.csdn.net/jelink/archive/2006/10/03/1319869.aspx

大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,如:可将 http://www.abc.com/1234/  重写为 http://www.abc.com/show.aspx?id=1234  但不能将
http://1234.abc.com  重写为  http://www.abc.com/show.aspx?id=1234

要实现这个功能,前提条件就是  www.abc.com 是泛解析的,再就是要修改一下URLRewriter了。
总共要修改2个文件

1.BaseModuleRewriter.cs

protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)
        
{
            HttpApplication app 
= (HttpApplication) sender;
            Rewrite(app.Request.Path, app);
        }

改为

protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e)
        
{
            HttpApplication app 
= (HttpApplication) sender;
            Rewrite(app.Request.Url.AbsoluteUri, app);
        }


就是将  app.Request.Path 替换成了  app.Request.Url.AbsoluteUri

2.ModuleRewriter.cs

for(int i = 0; i < rules.Count; i++)
            
{
                
// get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)
                string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";

                
// Create a regex (note that IgnoreCase is set)
                Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);

                
// See if a match is found
                if (re.IsMatch(requestedPath))
                
{
                    
// match found - do any replacement needed
                    string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));

                    
// log rewriting information to the Trace object
                    app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);

                    
// Rewrite the URL
                    RewriterUtils.RewriteUrl(app.Context, sendToUrl);
                    
break;        // exit the for loop
                }

            }

改为

for(int i = 0; i < rules.Count; i++)
            
{
                
// get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory)
                string lookFor = "^" + rules[i].LookFor + "$";

                
// Create a regex (note that IgnoreCase is set)
                Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);

                
// See if a match is found
                if (re.IsMatch(requestedPath))
                
{
                    
// match found - do any replacement needed
                    string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));

                    
// log rewriting information to the Trace object
                    app.Context.Trace.Write("ModuleRewriter""Rewriting URL to " + sendToUrl);

                    
// Rewrite the URL
                    RewriterUtils.RewriteUrl(app.Context, sendToUrl);
                    
break;        // exit the for loop
                }

            }



string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";

改成了

string lookFor = "^" + rules[i].LookFor + "$";


完成这2处改动之后重新编译项目,将生成的dll复制到bin目录下。

再就是写web.config里的重写正则了

<RewriterRule>
            
<LookFor>http://(\d+)\.abc\.com</LookFor>
            
<SendTo>/show.aspx?id=$1</SendTo>
        
</RewriterRule>


好了大功告成,你在IE地址栏输入http://1234.abc.com,就可以看到http://www.abc.com/show.aspx?id=1234

的结果了

若你在实际应用中碰到了问题,请查看文章 "修改UrlRewrite以对域名进行重写"需要注意的问题 ,希望能够帮助你!


附:

URLRewriter 的相关资料

http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

本文背景:

http://jzywh.cnblogs.com/archive/2005/09/29/246650.html


网上很多朋友看到我这篇文章,按照我的方法做了,但是还是没有得到想要的效果,其实有些问题需要注意一下,我上篇文章也只是提出了解决这一问题的办法的最核心的内容,有些朋友可能在实际运用中可能会碰到一些问题其实可以根据自己的经验作出相应处理应该可以解决,我在这里帮大家列出几点以帮助大家快速解决问题。


1.域名解析问题
      输入了域名http://1234.abc.com,浏览器提示找不到网页。首先,你应该确认你的域名是否支持泛域名解析,就是让所有的二级,三级域名都指向你的server。其次,要保证你的站点是服务器上的默认站点,就是80端口主机头为空的站点即可以直接用IP可以访问的http://1234.abc.com,要么要提示你的站点的错误信息,要么会正确的执行你定义的URLRewrite,要么显示你的站点的首页。

2.不能执行重写的问题
      如果你确认你的域名解析是正确的,但是还是不能重写,访问http://1234.abc.com会提示路径"/"找不到...,
如果是这样的话,你先添加  ASPNET_ISAPI的通配符应用程序映射(这一步是必需的,Sorry!没有在上篇文章中提出来)。

操作方法:IIS站点属性 ->主目录 ->  配置




点击插入按键



选择或输入C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
取消"确认文件是否存在"前的钩. 
确定

在来访问http://1234.abc.com  应该是没有问题了。


3. 默认首页失效,因为把请球直接交给asp.net处理,IIS定义的默认首页将会失效,出现这种情形:
访问http://www.abc.com 不能访问首页,而通过http://1234.abc.com/default.aspx可以访问。
为解决这个问题,请自己在Web.Config中设置 lookfor /  to /default.aspx 或 index.aspx ..的重写,完全可以解决问题。


OK,我列出了应该会普遍出现的问题的解决方法,如果你出现了我这里没有列出的问题而你自己又不能解决的,请在此回复提问或者给我发邮件或者加我QQ.
posted @ 2007-11-15 19:30 Jwin 阅读(113) | 评论 (1)编辑