ASP教程之在Remoting Server上获得Remoting Clie...
asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。client|ip地点|serverInshort,theRemotingServercanmakeuseofSinkandSinkProvidertoretrievetheIPaddressoftheincomingrequest.TheIPaddressisavailableintheTransportHeadersoftheincomingmessage.AfterretrievingtheIPaddressintheSink,wesavetheIPaddresstotheCallContext,sothatitwillbeavailablelaterinthecodeexecutionpathaswell.Thefollowingsaresomebackgroundinformationregardingthetopics:SinksandSinkChains
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsinkssinkchains.asp
UsingCallContext
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconusingcallcontext.asp
CodemodifiedfromthesamplebyIngoRammer,authorof“Advanced.NetRemoting”:
usingSystem;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Runtime.Remoting;
usingSystem.Runtime.Remoting.Messaging;
usingSystem.Runtime.Remoting.Channels;
usingSystem.Threading;
usingSystem.Net;
namespaceClassLibRemotingIPSink
{
publicclassClientIPServerSinkProvider:IServerChannelSinkProvider
{
privateIServerChannelSinkProvidernext=null;
publicClientIPServerSinkProvider(IDictionaryproperties,ICollectionproviderData)
{
}
publicvoidGetChannelData(IChannelDataStorechannelData)
{
}
publicIServerChannelSinkCreateSink(IChannelReceiverchannel)
{
IServerChannelSinknextSink=null;
if(next!=null)
{
nextSink=next.CreateSink(channel);
}
returnnewClientIPServerSink(nextSink);
}
publicIServerChannelSinkProviderNext
{
get{returnnext;}
set{next=value;}
}
}
publicclassClientIPServerSink:BaseChannelObjectWithProperties,IServerChannelSink,IChannelSinkBase
{
privateIServerChannelSink_next;
publicClientIPServerSink(IServerChannelSinknext)
{
_next=next;
}
publicvoidAsyncProcessResponse(System.Runtime.Remoting.Channels.IServerResponseChannelSinkStacksinkStack,System.Objectstate,System.Runtime.Remoting.Messaging.IMessagemsg,System.Runtime.Remoting.Channels.ITransportHeadersheaders,System.IO.Streamstream)
{
}
publicStreamGetResponseStream(System.Runtime.Remoting.Channels.IServerResponseChannelSinkStacksinkStack,System.Objectstate,System.Runtime.Remoting.Messaging.IMessagemsg,System.Runtime.Remoting.Channels.ITransportHeadersheaders)
{
returnnull;
}
publicSystem.Runtime.Remoting.Channels.ServerProcessingProcessMessage(System.Runtime.Remoting.Channels.IServerChannelSinkStacksinkStack,System.Runtime.Remoting.Messaging.IMessagerequestMsg,System.Runtime.Remoting.Channels.ITransportHeadersrequestHeaders,System.IO.StreamrequestStream,outSystem.Runtime.Remoting.Messaging.IMessageresponseMsg,outSystem.Runtime.Remoting.Channels.ITransportHeadersresponseHeaders,outSystem.IO.StreamresponseStream)
{
if(_next!=null)
{
IPAddressip=requestHeadersasIPAddress;
Console.WriteLine(ip.ToString());
CallContext.SetData("ClientIPAddress",ip);
ServerProcessingspres=_next.ProcessMessage(sinkStack,requestMsg,requestHeaders,requestStream,outresponseMsg,outresponseHeaders,outresponseStream);
returnspres;
}
else
{
responseMsg=null;
</p>结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。 如何更好的使自己的工具看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 不能只是将它停留在纸上谈兵的程度上。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
页:
[1]