locked
WCF WebServices в Windows 8 RRS feed

  • Вопрос

  • Подскажите пожалуйста, почему (именно почему) в Metro стало недоступно использование WCF WebServices (сборка System.ServiceModel.Web), в частности, WebHttpBinding и всех связанных классов. 

    Было очень легко использовать вебсервисы в помощью объявления канала в ChannelFactory

    [ServiceContract]
    public interface IEndPoint
    {
    string GetURI();
    }

    ...

      var cf2 = new ChannelFactory< IEndPoint >(new WebHttpBinding() {  OpenTimeout = timeout,  CloseTimeout = timeout, ReceiveTimeout = timeout,  SendTimeout = timeout}, url);
        return cf2.CreateChannel();

    ...

    как это можно реализовать теперь?

    Использовать HttpClient не хочется, если я правильно понял - то там нет такого прозрачного механизма запроса данных всего одной строкой, как с использованием ChannelFactory: channel.GetURI()


    Sorry of my bad english)

    14 февраля 2013 г. 7:32

Ответы

  • Многое в Metro изменилось по 2м причинам. 1. Безопасность. 2. Производительность (ассинхронность).

    Если WebHttpBinding не отвечал хотя бы одному из пунктов, то его судьба была предопределена. Могу сказать лишь, что такая судьба постигла очень многих вкусных вещей и скорее всего мы все их увидим в .Net 5.0


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Предложено в качестве ответа Abolmasov Dmitry 18 февраля 2013 г. 8:24
    • Помечено в качестве ответа Abolmasov Dmitry 18 февраля 2013 г. 8:32
    14 февраля 2013 г. 7:45
  • Привет

    Да, в windows 8 в связи с ограничениями платформы некоторые классы были убраны, и пока для взаимодействия с WCF остается один класс - HttpClient, использование которого вы и нашли.

    Немного упростить и сделать код менее большим может помочь библиотека Microsoft ASP.NET Web API Client Libraries (pre-release версия) и также статья Calling a Web API From a .NET Client (C#)


    Для связи [mail]

    • Помечено в качестве ответа Sellec 18 февраля 2013 г. 8:28
    18 февраля 2013 г. 8:23

Все ответы

  • Многое в Metro изменилось по 2м причинам. 1. Безопасность. 2. Производительность (ассинхронность).

    Если WebHttpBinding не отвечал хотя бы одному из пунктов, то его судьба была предопределена. Могу сказать лишь, что такая судьба постигла очень многих вкусных вещей и скорее всего мы все их увидим в .Net 5.0


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Предложено в качестве ответа Abolmasov Dmitry 18 февраля 2013 г. 8:24
    • Помечено в качестве ответа Abolmasov Dmitry 18 февраля 2013 г. 8:32
    14 февраля 2013 г. 7:45
  • ну а есть ли механизм, заменяющий webhttp в такой же мере, чтобы можно было пользоваться channelfactory (или чем-то похожим) прозрачно, с поддержкой REST?

    Пример, приведенный в этой теме, выглядит просто ужасно:

    var myType = new MyType() { Name = "fred" };
    var dataContractSerializer = new DataContractSerializer(typeof(MyType));
    var memoryStream = new MemoryStream();
    dataContractSerializer.WriteObject(memoryStream, myType);
    memoryStream.Position = 0;
    HttpContent content = new StreamContent(memoryStream);
    httpClient.PostAsync(new Uri("http://google.com", UriKind.Absolute), content);
    это ДОЛЖНО выглядеть буквально парой строк, либо я что-то перестал понимать в программировании.

    Sorry of my bad english)

    14 февраля 2013 г. 8:00
  • Привет

    Да, в windows 8 в связи с ограничениями платформы некоторые классы были убраны, и пока для взаимодействия с WCF остается один класс - HttpClient, использование которого вы и нашли.

    Немного упростить и сделать код менее большим может помочь библиотека Microsoft ASP.NET Web API Client Libraries (pre-release версия) и также статья Calling a Web API From a .NET Client (C#)


    Для связи [mail]

    • Помечено в качестве ответа Sellec 18 февраля 2013 г. 8:28
    18 февраля 2013 г. 8:23