爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7725|回复: 13

请大家一起来分析这个错误

[复制链接]

新浪微博达人勋

发表于 2012-6-21 17:44:32 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
2012-06-21 16:50:53 [INFO ] [6108][ContourMapApp.LogUtils][Write][35] - System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
   at MeteoInfoC.Projections.ProjectionInfo.ToProj4String()
   at MeteoInfoC.Map.ProjectionSet..ctor()
   at MeteoInfoC.Map.MapView..ctor()
   at MeteoInfoC.Legend.MapFrame..ctor()
   at ContourMapApp.frmMain.InitializeComponent() in E:\test\ContourMapApp\frmMain.Designer.cs:line 31
   at ContourMapApp.frmMain..ctor() in E:\test\ContourMapApp\frmMain.cs:line 25
   at ContourMapApp.ContourApp.GetMapProvide(Boolean needPaint) in E:\test\ContourMapApp\ContourApp.cs:line 193
   at ContourMapApp.ContourApp._exportMapStream() in E:\test\ContourMapApp\ContourApp.cs:line 181

2012-06-21 16:51:39 [INFO ] [6108][ContourMapApp.LogUtils][Write][35] -    at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
   at MeteoInfoC.Projections.ProjectionInfo.ToProj4String()
   at MeteoInfoC.Map.MapView.AddVectorLayer(VectorLayer aLayer)
   at MeteoInfoC.Map.MapView.AddLayer(MapLayer aLayer)
   at MeteoInfoC.Legend.MapFrame.AddLayerNode(LayerNode aLN)
   at ContourMapApp.frmMain.InitChinaRiverLayer() in E:\test\ContourMapApp\frmMain.cs:line 279

上面两个错误最终都是在MeteoInfoC.Projections.ProjectionInfo.ToProj4String()这个函数执行的时候出的错?
请王老师和大家分析一下这个错误的原因。

说一下我的使用场景:服务器上有1个webservice,其中一个函数是生成等值图的。
我本机上用LoadRunner模拟了10个客户端,10个客户端并发地多次请求生成等值图的函数,最终有些请求就会失败,报上面的错误。如果是1个客户端,好像不会报错。

请大家分析一下,先谢了~~~




密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-6-22 10:13:06 | 显示全部楼层
错误暂时还没分析出来,不过你是如何用asp.net调用winform的库作为服务的呢,可否赐教?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-6-25 09:31:06 | 显示全部楼层
很简单的呀,引用winform的dll,在暴露的service方法中直接调用就可以了,原理我觉得和王老师库里面的MIApp一样,其实也是一个窗体,里面有保存图片的方法SaveFigure(),直接调用了就可以了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-6-25 09:58:12 | 显示全部楼层
坐等王老师来解答
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-25 20:37:58 | 显示全部楼层
对于web程序我没什么经验,爱莫能助。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-6-26 10:26:50 | 显示全部楼层
王老师,这个我觉得和web程序还是winform程序没有关系,因为错误发生在控件初始化或者为控件添加图层的时候,很巧妙的是错误发生的源头都在MeteoInfoC.Projections.ProjectionInfo.ToProj4String()这句,我想源代码在王老师那里,可否确保这里面不会有bug,线程也是安全的,也进行了异常的处理。。
十分感谢,我觉得这么好的东西,应该能真正的应用上就好了。
最后,不知道王老师对这个软件以后的进展是怎么考虑的,既然免费的拿出来让大家使用,有没有开源的想法呀?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-26 12:58:12 | 显示全部楼层

MeteoInfo中生成的图层是带投影信息的,在添加图层的时候会判断图层的投影和MapView的投影是否一致,如果不一致会对图层进行投影转换以确保和MapView的投影一致。判断两个投影是否一致也得考虑投影参数是否一致,因此把投影信息转换为投影字符串来判断两个字符串是否一致。你说的问题可能是这里发生的。不过单单看代码很难找到bug,不知道怎样才能重现出这样的错误?

以后也许会开源,不过世事难料,几年前也从没想过自己会做这样的软件。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-6-26 16:51:00 | 显示全部楼层
重现的过程比较复杂:有一个窗体,窗体有个初始化图层的函数,添加的5个固定的图层。然后频繁不断的创建这个窗体的实例,并且调用初始化图层的函数。调用的次数多了就会出错。
从报错的位置:ProjectionInfo.ToProj4String()以及报错的消息:System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
来看,我估计在方法ToProj4String里面,肯定有对集合的操作。这个错误发生的原因就是在遍历集合的过程中,集合发生了变化,比如增加或者删除了元素。
而且很有可能这个集合还是静态的,请王老师考虑。
谢谢~~~期待王老师的回复。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-27 22:35:56 | 显示全部楼层
leungrs 发表于 2012-6-26 16:51
重现的过程比较复杂:有一个窗体,窗体有个初始化图层的函数,添加的5个固定的图层。然后频繁不断的创建这个 ...

看得出你做软件很专业。ToProj4String()里有对Dictionary的操作,问题可能出在这里,我做了另外的处理,新生成了一个MeteoInfoC.dll文件(见置顶帖子),你下载试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-6-27 23:31:48 | 显示全部楼层
leungrs 发表于 2012-6-25 09:31
很简单的呀,引用winform的dll,在暴露的service方法中直接调用就可以了,原理我觉得和王老师库里面的MIApp ...

我用asp.net引用winform的类库总是说是只能引用webform的类库,改天截个图上来
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表