2015-12-21 74 views
0

下一小段代码在控制台应用程序的伟大工程,但在Silverlight 5应用程序(这里我需要它!)它无法通过投掷NotSupportedException异常Simple.OData.Client失败的Silverlight 5

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 vers。 4.13.0(=最新的稳定)到我的Visual Studio 2015 Silverlight项目中。

+0

您能粘贴异常消息吗? –

+0

对不起,我忘了:异常有一个空白的消息,但它也有一个内部异常(也是一个NotSupportedException),显示消息:“不支持指定的方法”。 –

+0

我可以尝试调试这个问题,但是你有错误的堆栈跟踪?它可以响铃。 –

回答

0

下面的代码添加到您的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/

+0

嗨Vagif。太棒了 - 我永远都不会想到我自己!但是,我仍然需要尝试解决方案,但无论如何非常感谢您的努力。只要我尝试过,我会回来标记这个答案。 –

+0

当然你应该尝试一下。永远不要相信陌生人 –

+0

嗨Vagif。它的工作 - 但现在我得到一个SecurityException。我搜索了它,发现我需要在服务器端启用访问策略(跨域访问),方法是在Web服务器上放置访问策略xml文件。不过,我的服务是自行托管的。如何以编程方式添加所需的访问策略? –

0

试试这个:

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

找到here

+0

它没有区别 - 仍然是完全相同的例外。 –

+0

你可以用'.For ()'而不是'.For 来重新尝试' –

+0

这正是我所做的(如果我省略了缺陷,我会得到一个语法错误) –