ASP.NET 5 добавить ссылку службы WCF

В Visual Studio 2015 Preview (предварительный выпуск), как я могу добавить ссылку на службу для службы WCF ?

В настоящее время это довольно сложный процесс, поскольку инструментарий, похоже, не очень помогает в создании кода клиента WCF или автоматической карте из файлов конфигурации. Кроме того, как отметил dotnetstep, команда ASP.NET еще не перенесла System.ServiceModel на 5 (или предоставила альтернативу для клиентов WCF еще ). Тем не менее, мы можем использовать кодовый подход для создания клиентского прокси и использовать svcutil для генерации наших ссылочных classов обслуживания.

Предпосылки для решения

В этом примере я предположим, что вы локально размещаете службу по адресу http: // localhost: 5000 / MapService.svc, который реализует контракт IMapService . Кроме того, мы будем называть проект, который будет содержать прокси-сервер MapClient .

Ваш project.json должен выглядеть примерно так:

 { "commands": { "run": "run" }, "frameworks": { "dnx451": { "dependencies": { "Microsoft.AspNet.Mvc": "6.0.0-beta2" }, "frameworkAssemblies": { "System.ServiceModel": "4.0.0.0" } } } } 

Создание ссылочных classов службы

Во-первых, давайте создадим папку « Service References на MapClient проекте MapClient .

Затем откройте командную строку Developer Command Prompt для VS2015 и перейдите в MapClient проекта MapClient :

 cd "C:\Users\youraccount\Documents\Visual Studio 2015\Projects\MapClient\src\MapClient" 

Убедитесь, что MapService запущен и выполните следующую команду:

 svcutil /language:cs /out:"Service References\MapServiceReference.cs" http://localhost:5000/MapService.svc 

Это должно сгенерировать два файла: output.config и MapServiceReference.cs .

Создайте клиентский прокси-код на основе кода

Поскольку нет возможности автоматически сопоставлять конечную точку и привязывать конфигурацию из файла конфигурации к вашей output.config в настоящее время в ASP.NET 5, output.config не очень output.config для нас. Вы можете удалить его.

Вместо этого давайте создадим прокси-сервер клиента в коде:

 using System.ServiceModel; namespace TestWCFReference { public class Program { public void Main(string[] args) { var endpointUrl = "http://localhost:5000/MapService.svc"; BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress endpoint = new EndpointAddress(endpointUrl); ChannelFactory channelFactory = new ChannelFactory(binding, endpoint); IMapService clientProxy = channelFactory.CreateChannel(); var map = clientProxy.GetMap(); channelFactory.Close(); } } } 

Теперь вы можете использовать экземпляр clientProxy для доступа к любому Операционному контракту в IMapService .

В качестве побочного элемента лучше было бы создать архитектуру для создания файла конфигурации с ключом: значение, которое хранит вашу конфигурацию привязки и конечной точки, и использовать объект Microsoft.Framework.ConfigurationModel.Configuration для заполнения вашего ChannelFactory чтобы вы могли сохранить конфигурацию своего сервиса вне вашего кода, но, надеюсь, этот пример поможет вам начать.

Существует новое расширение Visual Studio, которое позволяет добавлять и использовать ссылки на службы, как в предыдущих версиях. Он также совместим с новым CoreCLR, я только что его протестировал.

http://blogs.msdn.com/b/webdev/archive/2015/12/15/wcf-connected-service-visual-studio-extension-preview-for-asp-net-5-projects.aspx

В настоящее время нет доступных инструментов для этой и возможной причины для этого System.ServiceModel, который недоступен в asp.netcore5.

Если вы решили использовать ASP.net 5, вы можете сделать следующее, чтобы использовать службу WCF (я использую Visual Studio 2015 CTP 5 для этого ответа)

В VS 2015 CTP 5 это позволяет нам добавить ссылку на обычную библиотеку classов.

  1. Создайте службу WCF.
  2. Создать обычную библиотеку classов (я выбираю .NET Framework 4.6)
  3. После этого я добавил ссылку службы WCF в ClassLibrary.
  4. Добавьте ClassLibrary в качестве ссылки на веб-сайт ASP.net 5. (Поскольку Framework CoreCLR не поддерживает System.Service Model, поэтому я удалил это из project.json) Рамочную часть project.json.

     "frameworks": { "aspnet50": { "frameworkAssemblies": { "System.ServiceModel": "" }, "dependencies": { "ClassLibrary2": "1.0.0-*" } } }, 
  5. Теперь, если вы посмотрите на проект classlibrary, он содержит файл app.config.
  6. Скопируйте этот файл и поместите его в папку wwwroot проекта веб-сайта ASP.net (vnext)
  7. переименуйте его в web.config.

Теперь запустите приложение.

Изменить : новое расширение для добавления подключенной службы, как указано в других ответах, по-прежнему не работает для меня, но я нашел другую рабочую конфигурацию, хотя она требует, чтобы вы не использовали dnxcore50 :

  • Имейте библиотеку classов, содержащую ссылку на службу (выберите фреймворк <= aspnet5, например, dnx451)
  • Ссылка, что один в ваш aspnet5 с правым щелчком по ссылкам (создаст все материалы обертки)
  • Имейте сервисную модель и требуемую DLL сериализации в разделе «framework» project.json (dnxcore необходимо удалить)

      "dnx451": { "dependencies": { "YourClassLibWillAppearHere": "1.0.0-*" // after you reference it }, "frameworkAssemblies": { "System.ServiceModel": "4.0.0.0", "System.ServiceModel.Http": "4.0.0.0", "System.Runtime.Serialization": "4.0.0.0" } } 

Вы должны быть в состоянии делать то, что вам нужно:

 using YourNameSpace.ServiceReference 

Старый ответ :

это сработало для меня:

Я выполнил обе инструкции одновременно с известными проблемами для beta4 (найти на странице «WCF») по этой ссылке:

https://github.com/aspnet/Home/releases

поэтому мои шаги, где :

  1. добавлена ссылка на другой проект (библиотека classов или приложение для Windows 8.1 Univ, как указано)
  2. скопировал ссылочный class в проект ASP.NET 5
  3. скопировал весь

    ...

    от app.config до web.config

  4. скопировал все эти отсутствующие списки зависимостей из приведенной выше ссылки в project.json , в рамках общих зависимостей, оставив в покое только определенные фреймворки ( попытка ссылки на библиотеку classов dotnet4.6 в качестве зависимости от структуры aspnet дала много отсутствующих типов в этой структуре )

"dependencies": { >> here << }

 "frameworks": { "dnx451": { }, "dnxcore50": { } } 

Еще один потенциальный способ сделать это, который сработал для меня, – просто добавить проект dll в решение и добавить службу ref здесь, как обычно, – включить DLL в проект MVC и обратиться за услугами.

Вам просто нужно скопировать содержимое app.config в проекты mvc собственного app.config – да, app.config, а не web.config.

Готово

  • Правильный способ связи WSSE Usernametoken для SOAP webservice
  • Ошибка: невозможно получить метаданные из службы WCF
  • Максимальная квота длины массива
  • OperationContext.Current имеет значение null после первого ожидания при использовании async / wait в службе WCF
  • Почему первый вызов WCF-клиента замедляется?
  • Ошибка в клиенте WCF, использующем веб-службу Axis 2 с WS-Security. Имя пользователя: Token PasswordDigest.
  • Возврат сервиса WCF «Метод не разрешен»
  • Тип содержимого text / html; charset = UTF-8 ответного сообщения не соответствует типу содержимого привязки (text / xml; charset = utf-8)
  • Ведение журнала исключений для служб WCF с использованием ELMAH
  • Пространство имен для
  • Передача сложных объектов в службу restа WCF
  • Interesting Posts

    Менеджер загрузки Classic на Firefox> 20

    java.net.SocketException: Недопустимый аргумент: connect

    Установка солнечного пятна solr с рельсами в производственной среде

    Как заменить загрузчик GRUB, изнутри Windows?

    Когда, если когда-либо, цикл разворачивания по-прежнему полезен?

    Когда macros C ++ полезны?

    Изменение цвета нижней строки EditText с помощью appcompat v7

    Наиболее эффективный алгоритм для бит-реверса (от MSB-> LSB до LSB-> MSB) в C

    Текстовый редактор в Windows для удаления большого блока текста авторского права в нескольких исходных файлах?

    Как разобрать динамический ключ JSON в результате результата Nested JSON?

    Определите размер метки в зависимости от количества текста и размера шрифта в Winforms / C #

    UIImageView Touch Event

    Android слайд-анимация слева направо

    Проблема с отображением и результатами Google, во всех браузерах

    Возможно ли предотвратить попытку NSURLRequest кэшировать данные или удалить кэшированные данные по запросу?

    Давайте будем гением компьютера.