Что случилось с System.ServiceModel в Windows Phone 8?

Я работаю над кроссплатформенным приложением для всех мобильных и настольных платформ. Это все на С#. Я работаю в Visual Studio, используя Xamarin. Это клиент-серверное приложение, поэтому я использую WCF.

Вдохновленный Miguel Castro: Extreme WCF, я разделил свое решение на WinForms клиента, Proxy, Contracts, Services и Console хост-сервер. Но такие проекты, как Proxy или Contracts, должны быть созданы как PCL (Portable Class Library), и вот моя проблема — я не могу использовать System.ServiceModel в PCL с Windows 10 или Windows Phone. Что происходит? Почему?

Какая лучшая прогулка?

РЕДАКТИРОВАТЬ: Думаю, с Windows Universal 10 проблем нет, только с Windows Phone 8. Когда я проверяю Windows 10, она автоматически возвращается к Windows 8. VS сообщает: Следующие объекты будут автоматически выбраны, поскольку они поддерживают тот же набор переносимых API: Windows 8

EDIT2: Чтобы быть еще более ясным, я изо всех сил пытаюсь реализовать это (ниже) в Portable Class Libiray с отмеченным Windows Phone 8:

using System.ServiceModel;

namespace Contracts
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        int GetSomething();
    }
}

person Tom    schedule 30.11.2015    source источник


Ответы (1)


Посмотрите здесь, чтобы узнать, какие API-интерфейсы поддерживаются в универсальной версии Windows. Платформа.

Вы можете использовать службы WCF из Windows Phone 8 (как подробно описано здесь), но я не могу найти никакой документации, поддерживающей размещение сервисов WCF из Windows Phone 8.

person Camilo Terevinto    schedule 30.11.2015
comment
Хорошо, думаю, Windows Universal 10 не проблема. Только Windows Phone 8 - person Tom; 30.11.2015
comment
Windows Phone 8 является частью универсальной платформы Windows. - person Camilo Terevinto; 30.11.2015
comment
Я проверяю Windows Phone 8 в свойствах PCL. А у меня нет System.ServiceModel. Означает ли это, что я не могу использовать свои услуги в приложении Windows Phone 8? - person Tom; 30.11.2015
comment
Спасибо, но это так странно:/ В Windows Phone я могу добавить ссылку на службу (при добавлении VS будет создана копия моего контракта), но я не могу создать или сослаться на контракт, который я сделал раньше, как сказал нам Мигель Кастро: / И речь даже не о разных ОС. Мы говорим о двух технологиях Microsoft. Используя Xamarin, я могу ссылаться на System.ServiceModel в приложении iOS, но в Windows Phone... Я не могу. Это шутка? - person Tom; 01.12.2015
comment
@ Том, это из-за функций, доступных в ядре .NET Framework до Windows Phone 8.1. Существует вероятность того, что Xamarin, который вы используете, на самом деле нацелен на UWP .NET, который является более новым и имеет гораздо больше возможностей. Чтобы сказать это как можно более ясно: Вы не можете *HOST* службы WCF из WP8.1 - person Camilo Terevinto; 01.12.2015
comment
Да, но когда вы добавите ссылку на службу, VS автоматически создаст копию контрактов в моем клиенте (WP8.1). Так что я не понимаю, почему я не могу создавать Контракты в WP8.1 вручную. - person Tom; 01.12.2015
comment
В любом случае, когда я создам Windows Universal 10, я смогу настроить таргетинг на Windows Phone 10? Правильно ли я понял, что вы можете размещать WCF из WP10, но не можете из WP8.1? - person Tom; 01.12.2015
comment
@ Том, почему бы тебе просто не использовать классы, сгенерированные VS автоматически? Вы должны легко заменить их своим кодом. - person Camilo Terevinto; 01.12.2015
comment
@Tom Windows Phone 10 имеет доступные пространства имен ServiceModel, как вы можете видеть по ссылке на мой пост. Независимо от того, можете ли вы на самом деле разместить службу WCF, я должен попытаться узнать. Я не уверен, почему вы все равно хотите разместить службу WCF с телефона. - person Camilo Terevinto; 01.12.2015
comment
Дело не в хостинге. Я не хочу этого делать. Это из-за моей архитектуры. Я хотел бы иметь один файл с контрактами в отдельном PCL, как сказал Мигель Кастро. Я просто хочу иметь декоратор [ServiceContract] и все. Никакого хостинга, только ссылка на lib с сервисным контрактом. Но я думаю, я не могу этого сделать - person Tom; 01.12.2015
comment
@ Том Насколько я видел, нет. Кроме того, помечать класс [ServiceContract] имеет смысл только для классов, которые являются сервисными контрактами. - person Camilo Terevinto; 01.12.2015
comment
Но сейчас, я думаю, осталось не так много телефонов с Windows 8. Большинство людей обновились до WP10, поэтому я думаю, что сделаю приложение только для WP10. - person Tom; 01.12.2015
comment
@ Том, наоборот, я бы сказал, что по крайней мере 70% телефонов все еще на WP8.1. Однако это скоро изменится, поскольку оператор связи выпустит обновления. Следующие 6 месяцев, скорее всего, 90% или более будут WP10 - person Camilo Terevinto; 01.12.2015