Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

В этом примере я предполагаю, что вы локально размещаете службу в 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"
            }
        }
    }
}

Создание классов справочной службы

Сначала создайте папку Service References в проекте MapClient.

Затем откройте командную строку Developer Command Prompt для VS2015 и перейдите в каталог проекта 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.

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

Поскольку нет возможности автоматически сопоставлять конечную точку и привязывать конфигурацию из файла конфигурации к вашему ClientBase в настоящее время в ASP.NET 5, 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<IMapService> channelFactory = new ChannelFactory<IMapService>(binding, endpoint);
            IMapService clientProxy = channelFactory.CreateChannel();

            var map = clientProxy.GetMap();

            channelFactory.Close();
        }
    }
}

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

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

Ответ 3

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

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

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

  • Создайте службу WCF.
  • Создать обычную библиотеку классов (я выбираю .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.

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

Ответ 4

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

  • Имейте библиотеку классов, содержащую ссылку на службу (выберите используемую структуру <= 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

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

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

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

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

так что мои шаги, где:

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

    <system.serviceModel>...

    из app.config в web.config

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

"dependencies": { >> here << }

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

Ответ 5

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

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

Готово