Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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
C# 多个XDocument.Load(uri)请求的限制?_C#_.net_Multithreading_Linq To Xml - Fatal编程技术网

C# 多个XDocument.Load(uri)请求的限制?

C# 多个XDocument.Load(uri)请求的限制?,c#,.net,multithreading,linq-to-xml,C#,.net,Multithreading,Linq To Xml,我正在通过Internet将不到400个XDocument.Load()请求线程化到类似但唯一的URI。每次我这样做时,32个请求都会导致“根元素丢失”。异常。每次都有不同的请求导致异常,但总是有32个,这有点可疑。XML的长度总是不同的,但没有一个是小于16kb的 XDocument.Load()中是否存在导致此错误的某种限制?或者可能是底层WebRequest(如果正在使用的话)或内部XmlReader?或者是穿线?我正在添加QueueUserWorkItem以将请求添加到线程池 有什么想法

我正在通过Internet将不到400个XDocument.Load()请求线程化到类似但唯一的URI。每次我这样做时,32个请求都会导致“根元素丢失”。异常。每次都有不同的请求导致异常,但总是有32个,这有点可疑。XML的长度总是不同的,但没有一个是小于16kb的

XDocument.Load()中是否存在导致此错误的某种限制?或者可能是底层WebRequest(如果正在使用的话)或内部XmlReader?或者是穿线?我正在添加QueueUserWorkItem以将请求添加到线程池

有什么想法吗


非常感谢。

就我个人而言,我怀疑这是XDocument。我要做的第一件事是连接一个网络工具,比如Fiddler,看看是什么通过电线传来的。特别是我想知道你是否被NLB或类似的限制

如果里面没有什么明显的东西,我会把它分成几步;下载为XML(可能是WebClient DownloadString),然后在本地解析XML。这里的优点是,您可以添加一些try/catch,以便在失败时记录得到的响应字符串,以便进行分析

如果您这样做,并且它开始运行,那么这可能表明XDocument.Load中存在错误;同样地,如果这样做失败了,但所有的响应都是格式良好的XML,那么类似的情况就是解析中的错误。但它也应该排除(或确定)与网络相关的原因。

  • 将每个Load()包装在一个重试循环中,例如3次
  • 将线程池中的最大线程数减少到16
  • 使用ab确定远程服务器是否不可靠
根据MSDN文档,加载应该是线程安全的:“这种类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证是线程安全的。”问题是否有可能是由加载XML的URI引起的?总有可能,但可能性不大。该服务是一个微软云托管的政府开放数据源。我可能会偶尔辍学一次,但每次都有32人?让我觉得这就是我的目的。为什么不使用WebRequest或WebClient并解析响应呢。至少你可以看到发生了什么。你可以配置你的VS,使其能够破解.net的源代码,或者使用Reflector Pro查看异常抛出的确切位置。或者你可以帮助我们发布实际的stacktrace,这可能有助于跟踪此类问题。