首页 新闻 会员 周边 捐助

xp下发布好使,但是win7和03下发布就会报错。读取文件后的回调函数里没弄明白。

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-25 14:14

       WebClient client = new WebClient();
                string uriString = GetUrl.GetAbsoluteUrl("Upload/IrrCondition/" + nodeID + ".rich?a=" + strID + "");
                Uri uri = new Uri(uriString, UriKind.Absolute);
                client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
                client.OpenReadAsync(uri);

 

      private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            try
            {
                1)Stream stream = e.Result;

       2)MessageBox.Show(e.Result.Length.ToString())

           }
            catch (Exception ex)
            {
                CommonFunction.ShowException(ex.Message);
            }
        }

只要走1或者2就会报错,有人知道什么原因么?

fei_fei的主页 fei_fei | 初学一级 | 园豆:185
提问于:2012-07-24 17:35
< >
分享
最佳答案
0

e.Result 为 null,所以会报错。为什么 e.Result 会为 null,你可以用 fiddler 抓包看下,client.OpenReadAsync(uri) 发出的调用成功否。

收获园豆:5
Launcher | 高人七级 |园豆:45050 | 2012-07-24 17:58

  private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            try
            {
      1) if (e!=null)
                {
      2)              MessageBox.Show( "e不为空");
                }
     3)   if (e.Result==null)
                {
     4)               MessageBox.Show( "e.Result为空");
                }        

}
            catch (Exception ex)
            {
                CommonFunction.ShowException(ex.Message);
            }
        }

代码会走2)e不为空,但是到3)时就会异常,导致4)不会走。

异常信息为:操作过程中出现异常,结果无效。有关异常的详细信息,请查看InnerException。

fei_fei | 园豆:185 (初学一级) | 2012-07-25 10:21

@fei_fei: http://msdn.microsoft.com/zh-cn/library/system.net.openreadcompletedeventargs.result.aspx

有空多看看msdn.包抓了没?InnerException的错误信息是啥?

Launcher | 园豆:45050 (高人七级) | 2012-07-25 10:26

@程序猿.码农: 朋友,msdn上说 :如果 Error 属性的值是一个 Exception 对象,或者 Cancelled 属性的值是 true,则说明异步操作没有正确完成,并且 Result 属性的值将无效。

我测试了下,Cancelled为False,但是以下代码能执行,是不是说明Error的值是Exception对象呢?

       Exception meEp = e.Error;

                 MessageBox.Show(meEp.InnerException.ToString());

抓包,我不太会,还没有试。。。

InnerException信息:

Syetem.Net.WebException:远程服务器返回了错误:NotFount。
位于 system.net.browser.browserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
位于 system.net.browser.browserHttpWebRequest.<>c_DisplayClassa.<EndGetResponse>b_9(Object sendState)
位于 system.net.browser.AsyncHepler.<>c_DisplayClass4.<BegionOnUI>b_0(Object sendState)

xp上发布访问一点问题没有,在03和win7发布访问才出现的这个问题。谢谢了

fei_fei | 园豆:185 (初学一级) | 2012-07-25 11:11

@fei_fei: NotFount,很明显的错误,就是你要访问的资源没找到。你可以在IE中输入 uri 来测试该 uri 标识的资源是否存在。

Launcher | 园豆:45050 (高人七级) | 2012-07-25 11:23

@程序猿.码农: 资源肯定是存在的,并且没问题的。因为我是把在xp下发布的程序考到win7下发布的。

但是直接访问资源文件确不让访问,找不到,给了个everyone权限,仍然不好使。。。

fei_fei | 园豆:185 (初学一级) | 2012-07-25 11:51

@fei_fei: 服务端的问题,你非要贴个客户端代码。不是把文件拷贝到IIS网站下,就表示资源肯定存在。资源存不存在是由web server决定的。ie返回404,就表明目标uri标识的资源不存在。你首先需要检查你的部属和IIS配置是否正确,你可以通过在服务器上IE里访问该uri来确定,记住用localhost。

Launcher | 园豆:45050 (高人七级) | 2012-07-25 13:03

@程序猿.码农: 非常感谢,已经好使了。是win7和03默认不支持文件扩展名导致的。添加上MIME就好使了。不明白xp为什么不用添,也许是支持的非常广吧。谢谢耐心帮助!!!

fei_fei | 园豆:185 (初学一级) | 2012-07-25 14:17
其他回答(1)
0

看看防火墙

克己复礼 | 园豆:163 (初学一级) | 2012-07-24 18:46

确定了 不是防火墙的问题。

支持(0) 反对(0) fei_fei | 园豆:185 (初学一级) | 2012-07-25 09:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册