CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  Web Services

关于实现HttpWorkerRequest的问题

楼主xiehuanxie(xiehuanxie)2006-04-05 12:58:30 在 .NET技术 / Web Services 提问

我想实现自己的一个web   host,  
  需要实现HttpWorkerRequest,  
  http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/ServiceStation.mspx?mfr=true  
   
  MSDN上能看到部分代码,但是不完整,  
  我上网的地方不能下载.  
   
  哪位兄弟有空把那个完整的示例代码下载了然后贴出来,  
  就在上面那个网址.  
  非常感谢. 问题点数:50、回复次数:3Top

1 楼califord(远方)回复于 2006-04-08 16:44:15 得分 50

没用做过哟Top

2 楼xiehuanxie(xiehuanxie)回复于 2006-04-09 13:07:09 得分 0

public   class   HttpListenerWorkerRequest   :   HttpWorkerRequest    
          {  
                  private   HttpListenerContext   _context;  
                  private   string   _virtualDir;  
                  private   string   _physicalDir;  
   
                  public   HttpListenerWorkerRequest(  
                          HttpListenerContext   context,   string   vdir,   string   pdir)  
                  {  
                          if   (null   ==   context)  
                                  throw   new   ArgumentNullException("context");  
                          if   (null   ==   vdir   ||   vdir.Equals(""))  
                                  throw   new   ArgumentException("vdir");  
                          if   (null   ==   pdir   ||   pdir.Equals(""))  
                                  throw   new   ArgumentException("pdir");  
   
                          _context   =   context;  
                          _virtualDir   =   vdir;  
                          _physicalDir   =   pdir;  
                  }  
   
                  //   required   overrides   (abstract)  
                  public   override   void   EndOfRequest()  
                  {  
                          _context.Response.OutputStream.Close();  
                          _context.Response.Close();  
                          _context.Close();  
                  }  
                  public   override   void   FlushResponse(bool   finalFlush)  
                  {  
                          _context.Response.OutputStream.Flush();  
                  }  
                  public   override   string   GetHttpVerbName()  
                  {  
                          return   _context.Request.HttpMethod;  
                  }  
                  public   override   string   GetHttpVersion()  
                  {  
                          return   string.Format("HTTP/{0}.{1}",  
                                  _context.Request.ProtocolVersion.Major,  
                                  _context.Request.ProtocolVersion.Minor);  
                  }  
                  public   override   string   GetLocalAddress()  
                  {  
                          return   _context.Request.LocalEndPoint.Address.ToString();  
                  }  
                  public   override   int   GetLocalPort()  
                  {  
                          return   _context.Request.LocalEndPoint.Port;  
                  }  
                  public   override   string   GetQueryString()  
                  {  
                          string   queryString   =   "";  
                          string   rawUrl   =   _context.Request.RawUrl;  
                          int   index   =   rawUrl.IndexOf('?');  
                          if   (index   !=   -1)  
                                  queryString   =   rawUrl.Substring(index   +   1);  
                          return   queryString;  
                  }  
                  public   override   string   GetRawUrl()  
                  {  
                          return   _context.Request.RawUrl;  
                  }  
                  public   override   string   GetRemoteAddress()  
                  {  
                          return   _context.Request.RemoteEndPoint.Address.ToString();  
                  }  
                  public   override   int   GetRemotePort()  
                  {  
                          return   _context.Request.RemoteEndPoint.Port;  
                  }  
                  public   override   string   GetUriPath()  
                  {  
                          return   _context.Request.Url.LocalPath;  
                  }  
                  public   override   void   SendKnownResponseHeader(int   index,   string   value)  
                  {  
                          _context.Response.Headers[  
                                  HttpWorkerRequest.GetKnownResponseHeaderName(index)]   =   value;  
                  }  
                  public   override   void   SendResponseFromMemory(byte[]   data,   int   length)  
                  {  
                          _context.Response.OutputStream.Write(data,   0,   length);  
                  }  
                  public   override   void   SendStatus(int   statusCode,   string   statusDescription)  
                  {  
                          _context.Response.StatusCode   =   statusCode;  
                          _context.Response.StatusDescription   =   statusDescription;  
                  }  
                  public   override   void   SendUnknownResponseHeader(string   name,   string   value)  
                  {  
                          _context.Response.Headers[name]   =   value;  
                  }  
                  public   override   void   SendResponseFromFile(  
                          IntPtr   handle,   long   offset,   long   length)   {   }  
                  public   override   void   SendResponseFromFile(  
                          string   filename,   long   offset,   long   length)   {   }  
   
                  //   additional   overrides  
                  public   override   void   CloseConnection()  
                  {  
                          _context.Close();  
                  }  
                  public   override   string   GetAppPath()  
                  {  
                          return   _virtualDir;  
                  }  
                  public   override   string   GetAppPathTranslated()  
                  {  
                          return   _physicalDir;  
                  }  
                  public   override   int   ReadEntityBody(byte[]   buffer,   int   size)  
                  {  
                          return   _context.Request.InputStream.Read(buffer,   0,   size);  
                  }  
                  public   override   string   GetUnknownRequestHeader(string   name)  
                  {  
                          return   _context.Request.Headers[name];  
                  }  
                  public   override   string[][]   GetUnknownRequestHeaders()  
                  {  
                          string[][]   unknownRequestHeaders;  
                          System.Collections.Specialized.NameValueCollection   headers   =   _context.Request.Headers;  
                          int   count   =   headers.Count;  
                          List<string[]>   headerPairs   =   new   List<string[]>(count);  
                          for   (int   i   =   0;   i   <   count;   i++)  
                          {  
                                  string   headerName   =   headers.GetKey(i);  
                                  if   (GetKnownRequestHeaderIndex(headerName)   ==   -1)  
                                  {  
                                          string   headerValue   =   headers.Get(i);  
                                          headerPairs.Add(new   string[]   {   headerName,   headerValue   });  
                                  }  
                          }  
                          unknownRequestHeaders   =   headerPairs.ToArray();  
                          return   unknownRequestHeaders;  
                  }  
                  public   override   string   GetKnownRequestHeader(int   index)  
                  {  
                          switch   (index)  
                          {  
                                  case   HeaderUserAgent:  
                          ?               return   _context.Request.UserAgent;  
                                  default:  
                                          return   _context.Request.Headers[GetKnownRequestHeaderName(index)];  
                          }  
                  }  
                    public   override   string   GetServerVariable(string   name)  
                  {  
                          //   TODO:   vet   this   list  
                          switch   (name)  
                          {  
                                  case   "HTTPS":  
                                          return   _context.Request.IsSecureConnection   ?   "on"   :   "off";  
                                  case   "HTTP_USER_AGENT":  
                                          return   _context.Request.Headers["UserAgent"];  
                                  default:  
                                          return   null;  
                          }  
                  }  
                  public   override   string   GetFilePath()  
                  {  
                          //   TODO:   this   is   a   hack  
                          string   s   =   _context.Request.Url.LocalPath;  
                          if   (s.IndexOf(".aspx")   !=   -1)  
                                  s   =   s.Substring(0,   s.IndexOf(".aspx")   +   5);  
                          else   if   (s.IndexOf(".asmx")   !=   -1)  
                                  s   =   s.Substring(0,   s.IndexOf(".asmx")   +   5);  
                          return   s;  
                  }  
                  public   override   string   GetFilePathTranslated()  
                  {  
                          string   s   =   GetFilePath();  
                          s   =   s.Substring(_virtualDir.Length);  
                          s   =   s.Replace('/',   '\\');  
                          return   _physicalDir   +   s;  
                  }  
   
                  public   override   string   GetPathInfo()  
                  {  
                          string   s1   =   GetFilePath();  
                          string   s2   =   _context.Request.Url.LocalPath;  
                          if   (s1.Length   ==   s2.Length)  
                                  return   "";  
                          else  
                                  return   s2.Substring(s1.Length);  
                  }  
          }  
  Top

3 楼xiehuanxie(xiehuanxie)回复于 2006-04-09 13:09:03 得分 0

我自己贴,郁闷Top

相关问题

关键词

得分解答快速导航

  • 帖主:xiehuanxie
  • califord

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo