ASP.NET 5 добавить ссылку службы WCF
В Visual Studio 2015 Preview (предварительный выпуск), как я могу добавить ссылку на службу для службы WCF
?
- Как создать пользовательские атрибуты пространства имен XML при использовании устаревшей службы SOAP?
- WCF ResponseFormat для WebGet
- C # WCF REST. Как вы используете сериализатор JSON.Net вместо стандартного DataContractSerializer?
- Wcf - превышена максимальная квота размера сообщений для входящих сообщений (65536)?
- Удаленный сервер возвратил неожиданный ответ: (413) Request Entity Too Large.
- Проблема отправки JSON-данных из JQuery в метод REST WCF
- Соединение не может быть выполнено, потому что целевая машина активно отказалась от него 127.0.0.1:3446
- Monotouch / WCF: как использовать wcf-сервис без svcutil
В настоящее время это довольно сложный процесс, поскольку инструментарий, похоже, не очень помогает в создании кода клиента 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, я только что его протестировал.
В настоящее время нет доступных инструментов для этой и возможной причины для этого System.ServiceModel, который недоступен в asp.netcore5.
Если вы решили использовать ASP.net 5, вы можете сделать следующее, чтобы использовать службу WCF (я использую Visual Studio 2015 CTP 5 для этого ответа)
В VS 2015 CTP 5 это позволяет нам добавить ссылку на обычную библиотеку classов.
- Создайте службу WCF.
- Создать обычную библиотеку classов (я выбираю .NET Framework 4.6)
- После этого я добавил ссылку службы WCF в ClassLibrary.
-
Добавьте ClassLibrary в качестве ссылки на веб-сайт ASP.net 5. (Поскольку Framework CoreCLR не поддерживает System.Service Model, поэтому я удалил это из project.json) Рамочную часть project.json.
"frameworks": { "aspnet50": { "frameworkAssemblies": { "System.ServiceModel": "" }, "dependencies": { "ClassLibrary2": "1.0.0-*" } } },
- Теперь, если вы посмотрите на проект classlibrary, он содержит файл app.config.
- Скопируйте этот файл и поместите его в папку wwwroot проекта веб-сайта ASP.net (vnext)
- переименуйте его в 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
поэтому мои шаги, где :
- добавлена ссылка на другой проект (библиотека classов или приложение для Windows 8.1 Univ, как указано)
- скопировал ссылочный class в проект ASP.NET 5
-
скопировал весь
... от app.config до web.config
-
скопировал все эти отсутствующие списки зависимостей из приведенной выше ссылки в project.json , в рамках общих зависимостей, оставив в покое только определенные фреймворки ( попытка ссылки на библиотеку classов dotnet4.6 в качестве зависимости от структуры aspnet дала много отсутствующих типов в этой структуре )
"dependencies": { >> here << }
"frameworks": { "dnx451": { }, "dnxcore50": { } }
Еще один потенциальный способ сделать это, который сработал для меня, – просто добавить проект dll в решение и добавить службу ref здесь, как обычно, – включить DLL в проект MVC и обратиться за услугами.
Вам просто нужно скопировать содержимое app.config в проекты mvc собственного app.config – да, app.config, а не web.config.
Готово