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就会报错,有人知道什么原因么?
e.Result 为 null,所以会报错。为什么 e.Result 会为 null,你可以用 fiddler 抓包看下,client.OpenReadAsync(uri) 发出的调用成功否。
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: http://msdn.microsoft.com/zh-cn/library/system.net.openreadcompletedeventargs.result.aspx
有空多看看msdn.包抓了没?InnerException的错误信息是啥?
@程序猿.码农: 朋友,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: NotFount,很明显的错误,就是你要访问的资源没找到。你可以在IE中输入 uri 来测试该 uri 标识的资源是否存在。
@程序猿.码农: 资源肯定是存在的,并且没问题的。因为我是把在xp下发布的程序考到win7下发布的。
但是直接访问资源文件确不让访问,找不到,给了个everyone权限,仍然不好使。。。
@fei_fei: 服务端的问题,你非要贴个客户端代码。不是把文件拷贝到IIS网站下,就表示资源肯定存在。资源存不存在是由web server决定的。ie返回404,就表明目标uri标识的资源不存在。你首先需要检查你的部属和IIS配置是否正确,你可以通过在服务器上IE里访问该uri来确定,记住用localhost。
@程序猿.码农: 非常感谢,已经好使了。是win7和03默认不支持文件扩展名导致的。添加上MIME就好使了。不明白xp为什么不用添,也许是支持的非常广吧。谢谢耐心帮助!!!
看看防火墙
确定了 不是防火墙的问题。