小编Dom*_*c P的帖子

在DataGrid的WinRT端口中,神秘的"没有足够的配额可用于处理此命令"

编辑9月26日

请参阅下面的完整背景.tl; dr:数据网格控件导致奇怪的异常,我正在寻找帮助隔离原因并找到解决方案.

我把它缩小了一点.我已经能够在较小的测试应用程序中重现行为,更可靠地触发不稳定的行为.

我绝对可以排除线程和(我认为)内存问题.新的应用程序不使用任务或其他线程/异步功能,我可以简单地通过向DataGrid中显示的对象类添加返回常量的属性来触发未处理的异常.这向我表明问题是在非托管资源耗尽或我尚未想到的问题.

修订后的计划结构如下.我创建了一个名为的用户控件EntityCollectionGridView,它有一个标签和一个数据网格.在控件的Loaded事件处理程序中,我将List<TestClass>数据网格分配给1000或10000行,让网格生成列.在页面OnNavigatedTo事件中的MainPage.xaml中将此用户控件实例化2-4次(或者Loaded,它似乎并不重要).如果发生异常,则会在显示MainPage后立即发生.

有趣的是,行为似乎并没有随着显示的行数而变化(它可以在10000行中可靠地工作,或者在每个网格中只有1000行可靠地失败),而是在所有网格中的总列数在给定时间加载.有20个属性显示,4个网格工作正常.有35个属性和4个网格,抛出异常.但是,如果我消除两个网格,同一个具有35个属性的类将正常工作.

请注意,我添加到TestClass20列到35列的所有属性都具有以下形式:

public string StringXYZ { get { return "asdfasdfasdfasdfasf"; } }
Run Code Online (Sandbox Code Playgroud)

因此,后备数据中没有额外的内存(同样,我认为内存压力无论如何都不是问题).

你们都觉得怎么样?同样,任务管理器中的句柄/用户对象/等看起来不错,但还有其他一些我可能会丢失的东西吗?

原帖

我一直在使用Silverlight Toolkit DataGrid到WinRT的端口,它在简单的测试(各种配置和多达10000行)中做得很好.但是,由于我试图将其嵌入到另一个WinRT应用程序中,我遇到了一个零星的异常(类型为System.Exception,在App.UnhandledException处理程序中引发),这种异常很难调试.

Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)
Run Code Online (Sandbox Code Playgroud)

该错误始终可重复,但不是确定性的.也就是说,我可以在每次运行应用程序时实现它,但并不总是通过执行相同次数的相同精确步骤来实现.错误似乎发生在页面转换(无论是向前导航到新页面还是返回到上一页),而不是(例如)更改数据网格的ItemsSource时.

应用程序结构基本上是通过层次结构的递归访问,每个层次结构级别都显示一个页面.在层次结构中当前节点的页面上,显示了每个子节点和一些孙子节点,并且对于任何子节点,可以显示数据网格.在实践中,我一直使用以下导航结构重现这一点:

Root page: shows no datagrid
  Child page: shows one datagrid and a few listviews
    Grandchild page: shows two datagrids, one bound to the
                     same source as Child page, the other one …
Run Code Online (Sandbox Code Playgroud)

c# xaml exception windows-runtime winrt-xaml

44
推荐指数
1
解决办法
3万
查看次数

来自WinRT的WCF客户端命中SocketError.AccessDenied(但与Fiddler捕获流量一起工作)

我正在将一个运行.NET 3.5+的.NET应用程序移植到WinRT,它包含一个WCF服务客户端(使用ChannelFactory<T>编程方式创建),它与原始版本共享几乎所有代码(即尽可能多的相同)该程序.该服务通过端口9443上的SSL访问,并使用Windows身份验证.该代码的原始版本完美无瑕,但WinRT端口通常会失败,除了三层三明治之外:我得到一个EndpointNotFoundException("没有端点监听https:// ..."),内部异常为WebException( "无法连接到远程服务器")内部异常SocketException("尝试以其访问权限192.168.xx:9443禁止的方式访问套接字").

奇怪的是,这将一直失败,除非我让Fiddler充当代理并捕获流量.

现在,更多细节.

  • SSL证书在受信任的机构中有效,并且涵盖附加到我的IIS站点的主机头名称(并且仅包含该名称).
  • 我可以浏览.svc文件及其?wsdl而不会出现任何错误,wsdl本身会报告我在应用程序中使用的确切URL.
  • 有问题的网站在9443上绑定了https,在9999上绑定了http(两者都有与之关联的主机头名称)
  • 我在站点根目录中有以下clientaccesspolicy.xml,可以通过相应的端口通过http和https访问它:

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="*">
            <domain uri="*" />
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
    Run Code Online (Sandbox Code Playgroud)
  • 运行该服务的服务帐户具有与之关联的UPN,因为有人建议可能有所帮助.我尝试将其放入<servicePrincipalName/>我的端点<identity />,但无济于事; 使用<dns />那里也没有帮助.

  • 绑定是BasicHttpBindingBasicHttpSecurityMode.Transport,而且我设置ClientCredentialType = HttpClientCredentialType.Windows.凭证目前是硬编码的并且是正确的.但我认为这不是问题所在,因为......
  • 我可以在循环中设置服务调用并观察它失败,失败,失败和失败,直到我将Alt + Tab切换到Fiddler并开始捕获流量.这通过Fiddler的本地代理重定向服务调用,我理解,无论出于何种原因,这使得它完全正常工作 - 我甚至不需要重新启动程序,更不用说重新编译它了.
  • 无论我是否选择解码SSL会话,我是否将Fiddler的中间人证书安装为可信与否都是一样的.
  • 我和Fiddler一起做的流量对我来说并不是特别有启发性.看起来像标准的协商握手,HTTP 401错误,然后成功连接.
  • IIS是版本7.日志(在inetpub\logs中)似乎没有显示任何有趣的东西 - 事实上,除非Fiddler附加,当一切正常时,我似乎永远不会看到任何东西.
  • 我试图用Wireshark来嗅出这个,但结果对我来说基本没用.它甚至看起来像Wireshark在我开始在Fiddler捕获之前选择任何东西,然后我得到了流量,但我不知道是否知道我是否只是看错了.
  • 尝试使用"添加服务引用"添加标准Visual Studio代理会导致与自定义代码完全相同的行为.
  • 只是为了踢,看看WinRT对像Silverlight这样的端口有未公开的限制,我将网站设置在4505端口(落在4502-4534范围内).没有改变.
  • 清除Internet选项中的缓存和cookie似乎并不重要.
  • Windows防火墙已关闭.Windows 8是否有任何其他可能阻碍流量的障碍?(并不是说它应该重要,因为桌面应用程序一直运行良好.)
  • Windows Defender实时保护已关闭.
  • 即使我在模拟器上运行应用程序,行为也是一样的.我无法在另一台物理机上测试,因为这是我唯一的Windows 8开发安装.

希望这表明我已经对此做了尽职调查.我错过了什么?如果我能提供更多信息,请告诉我.

.net wcf iis-7 windows-8 windows-runtime

4
推荐指数
1
解决办法
1262
查看次数

标签 统计

windows-runtime ×2

.net ×1

c# ×1

exception ×1

iis-7 ×1

wcf ×1

windows-8 ×1

winrt-xaml ×1

xaml ×1