【问题标题】:Simple.OData.Client fails with Silverlight 5Simple.OData.Client 因 Silverlight 5 而失败
【发布时间】:2015-12-21 12:30:11
【问题描述】:

以下一小段代码在控制台应用程序中运行良好,但在 Silverlight 5 应用程序中(我需要它!)它会因抛出 NotSupportedException 而失败:

    var client = new ODataClient("http://MYSERVER:9000/OData_v4/ProductionDb/");

    try
    {
        //This statement throws in Silverlight 5 but not in a .NET 4.5 Console application!!??
        var Meter = await client
            .For("MyEntityName")
            .Top(1)
            .FindEntryAsync();

        foreach (var entry in Meter)
            Debug.WriteLine(string.Format("{0}: {1}", entry.Key, entry.Value));
    }
    catch (NotSupportedException ex)
    {
        Debug.WriteLine(string.Format( "Exception {0}: {1} ", ex.GetType().ToString(), ex.Message ));
    }

为什么它在 Silverlight 中不起作用?根据文档,它应该可以直接与 Silverlight 一起使用......?

我使用 NuGet 安装 Simple.OData.Client 版本。 4.13.0(=最新稳定版)到我的 Visual Studio 2015 Silverlight 项目中。

【问题讨论】:

  • 可以粘贴异常信息吗?
  • 对不起,我忘记了:异常有一条空白消息,但它也有一个内部异常(也是 NotSupportedException),显示消息:“不支持指定的方法”。
  • 我可以尝试调试这个问题,但是你有错误的堆栈跟踪吗?它可以响铃。
  • 在底部查看单独的答案

标签: c# .net silverlight odata simple.odata


【解决方案1】:

将以下代码添加到您的 MainPage 构造函数中,就在 InitializeComponent() 之后:

HttpWebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
HttpWebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);

这应该可以解决问题(至少如果我能够通过这些更改运行您的代码)。非常令人沮丧,但与 OData 库无关。您可以在此处阅读有关此问题的更多信息:https://mattduffield.wordpress.com/2011/12/11/silverlight-specified-method-is-not-supported-on-this-request/

【讨论】:

  • 你好 Vagif。太棒了-我自己永远也想不通!但是,我仍然必须尝试您的解决方案,但无论如何非常感谢您的努力。一旦我尝试过,我会回来并将这个答案标记为有效。
  • 当然你应该试试。永远不要相信陌生人?
  • 你好 Vagif。它有效 - 但现在我得到了一个 SecurityException 。我搜索了一下,发现我需要通过在 Web 服务器上放置访问策略 xml 文件来在服务器端启用访问策略(跨域访问)。但是,我的服务是自托管的。如何以编程方式添加所需的访问策略?
  • 不幸的是我不知道,没有遇到过这样的问题。
【解决方案2】:

试试这个:

var Meter = await client
            .For<MyEntityName>()
            .Top(1)
            .FindEntryAsync();

找到here

【讨论】:

  • 没什么区别 - 仍然是完全相同的例外。
  • 你能用.For&lt;MyEntityName&gt;()代替.For&lt;MyEntityName&gt;再试一次吗
  • 这正是我所做的(如果我省略括号,则会出现语法错误)
  • 您应该能够通过简单地创建一个新的空白 Silverlight 应用程序并将我的代码添加到 MainPage.xaml.cs(例如覆盖 OnMouseLeftButtonDown 方法)来重现问题。
猜你喜欢
  • 2011-12-19
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2018-02-16
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多