Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF操作序列化集合错误_Wcf_Serialization_Dto - Fatal编程技术网

WCF操作序列化集合错误

WCF操作序列化集合错误,wcf,serialization,dto,Wcf,Serialization,Dto,我正在从WCF操作返回DTO对象的集合 我在服务上遇到以下错误(这只是偶尔发生) 错误:集合已修改;枚举操作不能执行 堆栈跟踪: at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at System.Collections.Generic.List`1.Enum

我正在从WCF操作返回DTO对象的集合

我在服务上遇到以下错误(这只是偶尔发生)

错误:集合已修改;枚举操作不能执行

堆栈跟踪:

at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at WriteArrayOfDeviceDTOToXml(XmlWriterDelegator , Object ,    XmlObjectSerializerWriteContext , CollectionDataContract )
at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator    xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)at   System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)at WritePositionServerStatisticsDTOToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract )
操作代码:

    public List<PositionServerDTO> GetPositionServers()
    {
        try
        {
            List<PositionServerDTO> list = new List<PositionServerDTO>();
            foreach (PositionServer posServer in dataStore.PositionServerList.ToList())
            {
                posServer.Statistics.CompileStatistics();
                list.Add(Mapper.Map<PositionServer, PositionServerDTO>(posServer));
            }
            return list;
        }
        catch (Exception ex)
        {
            dataStore.Log.Error("There was an error returning all Position Servers", ex);
            CustomException customerEx = new CustomException("There was an error returning all the Position Servers", 170, ex.Message, ex, "Position Service" , AMSLog.AlphaPositionService);
            throw new FaultException<CustomException>(customerEx, new FaultReason(customerEx.ErrorMessage), new FaultCode("170"));
        }
    }
公共列表GetPositionServers() { 尝试 { 列表=新列表(); foreach(dataStore.PositionServerList.ToList()中的PositionServer posServer) { posServer.Statistics.CompileStatistics(); 添加(Mapper.Map(posServer)); } 退货清单; } 捕获(例外情况除外) { dataStore.Log.Error(“返回所有位置服务器时出错”,例如); CustomException customerEx=新的CustomException(“返回所有职位服务器时出错”,170,例如消息,例如,“职位服务”,AMSLog.AlphaPositionService); 抛出新的FaultException(customerEx、新的FaultReason(customerEx.ErrorMessage)、新的FaultCode(“170”); } } 奇怪的是,错误似乎发生在DTO对象集合的序列化过程中,而不是在操作的实际主体中。我之所以知道这一点,是因为在catch语句中没有记录异常

我从未在调试时看到过这种情况,但我可以使用SvcTraceViewer将异常视为针对生产服务器设置的诊断跟踪的一部分(是的,我知道)


有人知道这是怎么回事吗?

好的,这是你的问题:

您正在实现自己的XMlSerialization(因为我可以在跟踪中看到
WriterrayOfDeviceToToToXML
),并且在迭代过程中,您正在对列表进行更改。显然,我没有代码,但这是我可以看到的基于您的跟踪

因此,我希望在
writearayofDeviceToToToXML
中查找我正在更改列表的位置

或者,
WriteArrayOfDeviceToToToXML
使用共享资源进行缓存,并在使用时对其进行更新。没有看到代码,这就是我所能说的


使现代化 好的,如果您还没有编写seralizer,那么您正在序列化的对象(
列表
)似乎有其他共享的资源。事实上,从名称来看,它似乎有一个设备数组,而且由于您的数据存储是单例的,所以您遇到了同步问题。所以,您发布的代码片段不是问题发生的地方。
PositionServerDTO
是否有
DeviceDTO
的列表


根据给出的信息,我只能说。

好的,这是您的问题:

您正在实现自己的XMlSerialization(因为我可以在跟踪中看到
WriterrayOfDeviceToToToXML
),并且在迭代过程中,您正在对列表进行更改。显然,我没有代码,但这是我可以看到的基于您的跟踪

因此,我希望在
writearayofDeviceToToToXML
中查找我正在更改列表的位置

或者,
WriteArrayOfDeviceToToToXML
使用共享资源进行缓存,并在使用时对其进行更新。没有看到代码,这就是我所能说的


使现代化 好的,如果您还没有编写seralizer,那么您正在序列化的对象(
列表
)似乎有其他共享的资源。事实上,从名称来看,它似乎有一个设备数组,而且由于您的数据存储是单例的,所以您遇到了同步问题。所以,您发布的代码片段不是问题发生的地方。
PositionServerDTO
是否有
DeviceDTO
的列表


根据提供的信息,我只能说这些。

我也有同样的问题

WCF通过反射使用对象名自动为您生成序列化代码

我正在研究一个解决方案,我的下一步是实现我的契约代理,在我的缓存列表中执行ToList(),在传递到序列化之前重写此属性,而不更改缓存

我希望它能帮助你,如果你有更好的解决方案,请张贴它

问候,


杰斐逊我也有同样的问题

WCF通过反射使用对象名自动为您生成序列化代码

我正在研究一个解决方案,我的下一步是实现我的契约代理,在我的缓存列表中执行ToList(),在传递到序列化之前重写此属性,而不更改缓存

我希望它能帮助你,如果你有更好的解决方案,请张贴它

问候,


杰斐逊

这是一个有趣而重要的问题。什么是数据存储?它是ORM数据库上下文吗?另外,您使用的是哪种实例化模式?数据存储是一个返回PositionServer对象列表的单例。不使用ORM,且服务上下文为每个会话。这是一个有趣而重要的问题。什么是数据存储?它是ORM数据库上下文吗?另外,您使用的是哪种实例化模式?数据存储是一个返回PositionServer对象列表的单例。不使用ORM,且服务上下文为每个会话。助教,谢谢你看。我肯定不是在使用我自己的序列化,而是让WCF为我序列化对象集合。不过我承认,看到WriteArrayOfDeviceToToXML很有趣,我认为它使用反射作为序列化过程的一部分(?)。该方法肯定不是我的方法(尽管DeviceDTO的对象肯定是)。的确,PositionServerDTO包含DeviceTo的数组列表。我已将此数组从位置serverdto中取出,错误不再发生。尽管如此,我仍然对这个过程感到不安——就像我说的问题发生在方法完成之后,在序列化过程perf的某个地方