如何从 .NET Core 3.1 中的 F# 访问 WCF 服务?

Posted

技术标签:

【中文标题】如何从 .NET Core 3.1 中的 F# 访问 WCF 服务?【英文标题】:How to access a WCF service from F# in .NET Core 3.1? 【发布时间】:2021-02-13 11:21:30 【问题描述】:

在.Net Framework 4.7.2 F#中,我一直在使用:

FSharp.Data.TypeProviders

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

从 F# .fs 文件访问我的本地 WCF 网络服务。

在使用 .NET Core 3.1 时,如何从 F# 客户端访问 WCF 服务?

TIA

如果不是,WCF/petapoco/PostgreSQL 的推荐升级路径是什么?

【问题讨论】:

【参考方案1】:

这是 F# 3.0 中的旧类型提供程序,它依赖 svcutil 进行代码生成。您可以参考它的 n​​uget 包,但可能(很可能)不支持 dotnet-svcutil 工具。但是你可以在 C# 中使用 WCF,所以:

    将新的 C# 项目添加到您的解决方案中 在 Visual Studio 中添加 Connected Service 并配置您的端点,这将生成必要的代码,构建您的项目(并测试它是否有效) 从您的 F# 项目中,添加对此 C# 项目的引用,然后 open ProjectName 创建您的类型,并在 F# 中使用它。您将获得有关类型的智能感知,因此用户体验与类型提供者没有太大区别。 如果需要,您可以发布独立的 exe:dotnet publish -r win10-x64 -c Release -p:PublishSingleFile=true -p:PublishTrimmed=true

【讨论】:

我没有看到要添加的 WCF 服务? @AlanWayne 你能更具体一点吗?通常,您可以通过其 http 端点添加服务,该端点引用来自 VS 的 wsdl 文件。然后在 C# 和 F# 代码中,您可以创建一个类型,例如 type MyPortType,并在代码中引用它。如果可以通过 svcutil 手动生成代码,则编译并引用项目或 dll。最简单的方法是构建一个包含 WCF 服务的空 C# dll,并从 F# 中引用它,这样您就可以访问所有类型。 我的错误。 WCF 服务可用,但前提是项目是 C# .NET Core、.NET Standard 或 ASP.NET Core Web 应用程序。我在最初的阅读中错过了这一点。很好的参考:使用 docs.Microsoft.com 上的 WCF Web 服务参考提供工具 谢谢

以上是关于如何从 .NET Core 3.1 中的 F# 访问 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET Core 3.1 中的存储库类创建确认电子邮件回调

如何更改 .NET Core 3.1 API 中的路由错误

将项目从 2.2 更新到 3.1(缺少程序集)或如何在 .NET Core 中使用 API POST 请求时,PostAsJsonAsync()在 .Net Core 3.1 中不起作用 [重复]

Asp.net Core 3.1-如何从控制器返回到 Razor 页面?

从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

如何在 .net core 3.1 中的 Newtonsoft JsonConverter 中注入依赖项