Simple.OData.Client не работает с Silverlight 5

Следующий небольшой фрагмент кода прекрасно работает в консольном приложении, но в приложении 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.

2 ответа

Решение

Добавьте следующий код в конструктор 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/

Попробуй это:

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

Нашел здесь

Другие вопросы по тегам