积极答复者
web services 在访问一个网站的时候出错

问题
-
我在做一个查看天气的web服务,但是在测试的时候出现了
Length: “stream.Length”引发了“System.NotSupportedException”类型的异常
Position: “stream.Position”引发了“System.NotSupportedException”类型的异常
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Net;
using System.IO;namespace WebApplication1
{
/// <summary>
/// Weather 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Weather : System.Web.Services.WebService
{[WebMethod]
public string GetWeather(string city)
{
string weacherhtml = String.Empty;
//转换输入参数的编码类型
string mycity = System.Web.HttpUtility.UrlEncode(city, System.Text.UnicodeEncoding.GetEncoding("gb2312"));
//初始化新的 WebRequest
HttpWebRequest webrt = (HttpWebRequest)WebRequest.Create("http://php.weather.sina.com.cn/search.php?city=" + mycity );
//返回对 Internet 请求的响应。
HttpWebResponse webrs = (HttpWebResponse)webrt.GetResponse();//从 Internet 资源返回数据流。
Stream stream = webrs.GetResponseStream();//读取数据流
StreamReader srm = new StreamReader(stream, System.Text.Encoding.Default);
//从头读到尾,把数据读到weacherhtml中
weacherhtml = srm.ReadToEnd();
//关闭打开的资源
srm.Close();
stream.Close();
webrs.Close();
//针对不同的网站,以下开始部分和结束部分不同。
//可通过查看网站的源文件解决。
int start = weacherhtml.IndexOf("城市天气 begin");
int end = weacherhtml.IndexOf("城市天气 end");
//返回一个HTML的Table,预报城市天气
return weacherhtml.Substring(start + 14, end - start);
}
}
}
请各位高手给指点一下
答案
全部回复
-
如果我没有记错的话,这里的请求返回的Stream是不可读的
你可以先测试下其stream.CanRead属性是否为true 应该是false 的
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~ -
你好 昨晚我弄错了 这个流是可读的 ,但是不可以写
我试了你的代码是可以的,但是你那里读取某个城市的天气的方法不对
private static void TestHttpWebRequest()
{
string weacherhtml = String.Empty;
//转换输入参数的编码类型
string mycity = System.Web.HttpUtility.UrlEncode("成都", System.Text.UnicodeEncoding.GetEncoding("gb2312"));
//初始化新的 WebRequest
HttpWebRequest webrt = (HttpWebRequest)WebRequest.Create("http://php.weather.sina.com.cn/search.php?city=" + mycity);
//返回对 Internet 请求的响应。
HttpWebResponse webrs = (HttpWebResponse)webrt.GetResponse();//从 Internet 资源返回数据流。
Stream stream = webrs.GetResponseStream();//读取数据流
StreamReader sw = new StreamReader(stream, System.Text.Encoding.Default);//从头读到尾,把数据读到weacherhtml中
weacherhtml = sw.ReadToEnd();
//关闭打开的资源
sw.Close();
stream.Close();
webrs.Close();
//针对不同的网站,以下开始部分和结束部分不同。
//可通过查看网站的源文件解决。
int start = weacherhtml.IndexOf("城市天气 begin");
int end = weacherhtml.IndexOf("城市天气 end");
//返回一个HTML的Table,预报城市天气
Console.WriteLine(weacherhtml.Substring(start + 14, end - start));
}
返回的结果中这段是相关的 要想提取出来是比较麻烦的
<div class="nav2">
<div class="nav21">
<h1>成都<span>(Chengdu)</span></h1>
</div>
<div class="nav22">
<span class="i1"><script type="text/javascript">document.write(get_w_update_time());</script></span>
| <a href="http://sms.sina.com.cn/magazine/moblie/dy.html?from=403#record" target="_blank" class="i4">天气短信预订</a> <a href="http://news.sina.com.cn/wap/tianqi.html" target="_blank" class="i5">手机看天气</a> <a href="javascript:sent_to_vb('成都','2009年12月25日,成都,多云转阴,12℃~4℃,风力:≤3级');" class="i6">转发至微博</a>
</div>
</div>
<!-- nav end -->
<!-- par begin-->
<div class="part-a">
<div class="part-a-l">
<div class="blk-s1">
<div class="title-s1">
<h2><img src="http://www.sinaimg.cn/dy/weather/images/php/w513_m_01.gif" width="56" height="35" alt="今天" /><span>2009年12月25日 星期五 己丑(牛)年 十一月初十</span></h2>
<span class="more"><span id="wtqs_c" title="摄氏度">℃</span> | <span id="wtqs_f" title="华氏度">℉</span></span><span class="more" style="margin-right:20px;"><a href="#h">历史气候</a></span> </div>
<!-- box begin-->
<div class="box-s1">
<div class="box-s1-l">
<div class="w-icon"><img src="http://image2.sina.com.cn/dy/weather/images/figure/duoyun_big.gif" ><img src="http://image2.sina.com.cn/dy/weather/images/figure/yin_big.gif" ></div>
<h2>多云转阴</h2>
<div class="w-number">
<span class="tpte">12℃</span>~<span class="tpte">4℃</span>
</div>
</div>
<div class="info-area">
<p></p>
<ul class="list-s1">
<li>风向:南</li> <li>体感温度:<span class="tpte">13℃</span>~<span class="tpte">6℃</span></li> <li>风力:≤3级</li> </ul>
<div class="line-s1"></div>
<ul class="list-s2">
<li>紫外线:<span class="fgreen">最弱</span></li> <li>舒适度:<span class="fgreen">较舒适</span></li> <li>污染指数:<span class="fgreen">中</span></li>
<li>防晒指数:<span class="fgreen">弱</span></li> <li>中暑指数:<span class="fgreen">无</span></li> <li>穿衣指数:<span class="fgreen">温凉</span></li> <li>空调指数:<span class="fred">开启制暖空调</span></li> <li>洗车指数:<span class="fgreen">适宜</span></li> <li>钓鱼指数:<span class="fgreen">较适宜</span></li>
</ul>
</div>
</div>
<!-- box end-->
</div><div class="blk-s2">
<div class="b_line"></div>
<div class="blk-s3">
<!-- box begin-->
<div class="box-s2">
<h3><img src="http://www.sinaimg.cn/dy/weather/images/php/w513_m_03.gif" width="38" height="20" alt="明天" /> <span class="date">12月26日 星期六</span></h3>
<div class="w-icon"><img src="http://image2.sina.com.cn/dy/weather/images/figure/duoyun_big.gif" ></div>
<div class="info-area">
<p>天气:多云</p>
<p>温度:<span class="tpte">11℃</span>~<span class="tpte">3℃</span></p>
<p>风力:≤3级</p>
</div>
</div>
<!-- box end-->
<!-- box begin-->
<div class="box-s2">
<h3><img src="http://www.sinaimg.cn/dy/weather/images/php/w513_m_04.gif" width="41" height="20" alt="后天" /> <span class="date">12月27日 星期日</span></h3>
<div class="w-icon"><img src="http://image2.sina.com.cn/dy/weather/images/figure/duoyun_big.gif" ></div>
<div class="info-area">
<p>天气:多云</p>
<p>温度:<span class="tpte">11℃</span>~<span class="tpte">3℃</span></p>
<p>风力:≤3级</p>
</div>
</div>
<!-- box end-->
</div>
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~ -
您的意思是我写的那个方法里面有返回的数据流,不好提取出来。
可是我在测试的时候当分步调试到
//从 Internet 资源返回数据流。
Stream stream = webrs.GetResponseStream();
执行后,在即时窗口查看一下它的值得时候
就报出
stream
{System.Net.ConnectStream}
[System.Net.ConnectStream]: {System.Net.ConnectStream}
base {System.MarshalByRefObject}: {System.Net.ConnectStream}
CanRead: true
CanSeek: false
CanTimeout: true
CanWrite: false
Length: “stream.Length”引发了“System.NotSupportedException”类型的异常
Position: “stream.Position”引发了“System.NotSupportedException”类型的异常
ReadTimeout: 300000
WriteTimeout: 300000
我看不到返回的数据