Как получить доступ к службе WCF из F # в .NET Core 3.1?

#wcf #f# #wsdl

#wcf #f# #wsdl

Вопрос:

В .Net Framework 4.7.2 F # я использовал:

 FSharp.Data.TypeProviders
  

с помощью

   type WSDL =  WsdlService<"http://...ServiceHost.svc">
  type AV   =  WsdlService<"http://...ServiceHost.svc">
  

чтобы получить доступ к моей локальной сетевой службе WCF из файла F # .fs.

Как мне получить доступ к службе WCF из клиента F #, когда .Используется NET Core 3.1?

TIA

Если нет, то какой рекомендуемый путь обновления для WCF / petapoco / PostgreSQL?

Ответ №1:

Это поставщик старого типа из F # 3.0, и он зависел от svcutil для генерации кода. Вы могли бы сослаться на его пакет nuget, но возможно (вероятно), что инструмент dotnet-svcutil не поддерживается. Но вы можете использовать WCF из C #, поэтому:

  1. Добавьте новый проект C # в свое решение
  2. Добавьте подключенную службу в Visual Studio и настройте свою конечную точку, это сгенерирует необходимый код, создаст ваш проект (и проверит, работает ли он)
  3. Из вашего проекта на F # добавьте ссылку на этот проект на C # и open ProjectName
  4. Создайте свой тип и используйте его из F #. Вы получите intellisense для типов, поэтому пользовательский интерфейс не сильно отличается от поставщика типов.
  5. При необходимости вы можете опубликовать автономный exe-файл:
    dotnet publish -r win10-x64 -c Release -p:PublishSingleFile=true -p:PublishTrimmed=true

Комментарии:

1. Я не вижу службы WCF для добавления?

2. @AlanWayne не могли бы вы быть немного более конкретным? Обычно вы можете добавить службу через ее конечную точку http, ссылаясь на файл wsdl из VS. Затем как в коде C #, так и в коде F # вы можете указать тип, что-то вроде type MyPortType , и ссылаться на него в коде. Если вы можете сгенерировать код вручную с помощью svcutil, затем скомпилируйте его и обратитесь к проекту или dll. Самый простой способ — создать пустую C # dll, которая включает вашу службу WCF, и ссылаться на нее из F #, что даст вам доступ ко всем типам.

3. Моя ошибка. Служба WCF доступна, но только в том случае, если проект является C # .NET Core, .NET Standard или ASP.NET Основное веб-приложение. Я пропустил это при первоначальном чтении. Хорошая ссылка: используйте инструмент поставщика ссылок на веб-службы WCF в документах. Microsoft.com Спасибо