.NET Core 中的 SOAP?
SOAP in .NET Core?
您如何在 .NET Core 中执行 SOAP? .Net Core 中是否有 Apache CXF 的等价物(不仅仅是简单的 SOAP 客户端,而是功能齐全的堆栈)?
抱歉,如果这是一个非常基本的问题,到目前为止我的搜索没有产生任何明确的答案。
Microsoft 目前不打算为 .NET Core 发布 SOAP 服务器端框架。 WCF ServiceHost 和 ASMX 都不可用。现在下结论还为时过早,哪些非 Microsoft 堆栈会加入并成为主导者。
随着 ASP.NET Web API 的引入和 REST 端点的崛起,WCF 已死。 WCF 客户端是一个互操作故事,而不是一个向前发展的故事(完整故事在这里:http://blog.tonysneed.com/2016/01/06/wcf-is-dead-long-live-mvc-6/)
几个月前,由于 WCF 客户端的限制(在与 Java Web 服务集成时,有人创建了一个响应 class,其名称与方法相同且位于相同的命名空间中当 WCF 客户端发送请求时,序列化失败 - 在 SO 中找不到相关问题)我不得不创建一个使用下划线的 SOAP HTTP 客户端 HttpClient。我最终发布了一个我们在生产中成功使用并支持 .NET Core 和 Xamarin 应用程序的开源版本 (https://github.com/gravity00/SimpleSOAPClient)。随意试一试。我推荐版本 2.0.0-RC03,因为自版本 1.x.
以来有一些重大改进
这里有一个小技巧,我在 "framework 452" ASP.Net 5.0 Web 应用程序中使用了目标。
不幸的是,新的 "Add connected service" -> "WCF service" 仅在定位 ".Net Core" 时有效,所以我创建了一个与我的网络应用程序同名的基本控制台应用程序。
控制台应用程序允许添加 "Service reference"。添加后 VS2015 在文件夹 "Service References" 中创建所有服务引用。
只需将文件夹内容移动到 Web 解决方案并使用接受 HttpBindings
和 EndPoint
参数的客户端构造函数。
在我的例子中,我连接到 Echosign 服务初始化客户端如下:
using (EchoSignDocumentService16PortTypeClient service = new EchoSignDocumentService16PortTypeClient(new BasicHttpBinding(BasicHttpSecurityMode.Transport), new EndpointAddress(adddress)))
{
...
}
我的旧客户端需要 SOAP,因此我创建了一个单独的 SOAP 库,它与我的旧客户端兼容,使用 .NET 框架,托管在一个单独的环境中。 (SOAP.mywebsite.com)。然后在www.mywebsite.com(created with asp.net Core上,我有一个rest接口,SOAP层调用rest接口。
调用rest接口的库是使用Swashbuckle生成的。
为了解决这个问题....我在 .Net 4.5 中创建了一个 nuget 包,连接到 .NET Core 不支持的本机 SOAP 客户端。接下来我创建了一个针对 .net 框架的 .Net 核心应用程序。这让我可以毫无错误地使用 nuget 包。
在 VS 2017 中,自 17 年 12 月 (v15.5) 起,您现在可以使用 WSDL 从使用连接服务的 .NET Standard 项目将生成的 WCF 客户端添加到服务中。在解决方案资源管理器中,您可以从 "Dependencies" 上的 right-click 或 "Add..."
下项目的 right-click 到达那里
您如何在 .NET Core 中执行 SOAP? .Net Core 中是否有 Apache CXF 的等价物(不仅仅是简单的 SOAP 客户端,而是功能齐全的堆栈)?
抱歉,如果这是一个非常基本的问题,到目前为止我的搜索没有产生任何明确的答案。
Microsoft 目前不打算为 .NET Core 发布 SOAP 服务器端框架。 WCF ServiceHost 和 ASMX 都不可用。现在下结论还为时过早,哪些非 Microsoft 堆栈会加入并成为主导者。
随着 ASP.NET Web API 的引入和 REST 端点的崛起,WCF 已死。 WCF 客户端是一个互操作故事,而不是一个向前发展的故事(完整故事在这里:http://blog.tonysneed.com/2016/01/06/wcf-is-dead-long-live-mvc-6/)
几个月前,由于 WCF 客户端的限制(在与 Java Web 服务集成时,有人创建了一个响应 class,其名称与方法相同且位于相同的命名空间中当 WCF 客户端发送请求时,序列化失败 - 在 SO 中找不到相关问题)我不得不创建一个使用下划线的 SOAP HTTP 客户端 HttpClient。我最终发布了一个我们在生产中成功使用并支持 .NET Core 和 Xamarin 应用程序的开源版本 (https://github.com/gravity00/SimpleSOAPClient)。随意试一试。我推荐版本 2.0.0-RC03,因为自版本 1.x.
以来有一些重大改进这里有一个小技巧,我在 "framework 452" ASP.Net 5.0 Web 应用程序中使用了目标。
不幸的是,新的 "Add connected service" -> "WCF service" 仅在定位 ".Net Core" 时有效,所以我创建了一个与我的网络应用程序同名的基本控制台应用程序。
控制台应用程序允许添加 "Service reference"。添加后 VS2015 在文件夹 "Service References" 中创建所有服务引用。
只需将文件夹内容移动到 Web 解决方案并使用接受 HttpBindings
和 EndPoint
参数的客户端构造函数。
在我的例子中,我连接到 Echosign 服务初始化客户端如下:
using (EchoSignDocumentService16PortTypeClient service = new EchoSignDocumentService16PortTypeClient(new BasicHttpBinding(BasicHttpSecurityMode.Transport), new EndpointAddress(adddress)))
{
...
}
我的旧客户端需要 SOAP,因此我创建了一个单独的 SOAP 库,它与我的旧客户端兼容,使用 .NET 框架,托管在一个单独的环境中。 (SOAP.mywebsite.com)。然后在www.mywebsite.com(created with asp.net Core上,我有一个rest接口,SOAP层调用rest接口。 调用rest接口的库是使用Swashbuckle生成的。
为了解决这个问题....我在 .Net 4.5 中创建了一个 nuget 包,连接到 .NET Core 不支持的本机 SOAP 客户端。接下来我创建了一个针对 .net 框架的 .Net 核心应用程序。这让我可以毫无错误地使用 nuget 包。
在 VS 2017 中,自 17 年 12 月 (v15.5) 起,您现在可以使用 WSDL 从使用连接服务的 .NET Standard 项目将生成的 WCF 客户端添加到服务中。在解决方案资源管理器中,您可以从 "Dependencies" 上的 right-click 或 "Add..."
下项目的 right-click 到达那里