更改WCF服务以使其与.NET Framework和.NET Core调用程序兼容

时间:2019-06-05 14:35:22

标签: .net web-services wcf .net-core

TL; DR 我有一个现有的WCF服务托管为Windows服务,我想对其进行修改,以便可以由现有的.NET Framework 4.7应用程序以及新的.NET调用它。核心2.2应用。解决这个问题最简单的方法是什么?

完整说明::我有一个正在.NET Framework 4.7上运行的现有Web应用程序(称为“ A”)。它与.NET 4.7上的现有WCF服务“ B”(Windows服务)进行通信。他们通过NetTcpBinding进行通信。

我正在.NET Core 2.2上构建一个新的Web App'C'。我需要它与现有服务B对话。我可以根据需要修改A和B,但是时间和金钱是有限的。另外,B使用仅在.NET Framework上运行的API,因此不能将其转换为在.NET Core上运行,这让我很沮丧。

服务B很小。整个暴露合约有5种方法。安全性确实很小。这是一家小型公司的仅Intranet应用程序。

什么是最快,最简单的方法来修改现有的WCF服务B(和A(如果需要)),以便可以与应用程序A和C通话?

我想我应该只在应用程序A和B上change the WCF Binding进行一些操作,以便可以在C上使用HttpClient轻松进行交谈;如果是这样,那是哪个绑定,以及如何使用HttpClient与之进行接口?另外,是否存在将WCF绑定从NetTcpBinding更改为其他会困扰我的隐藏“陷阱”?

1 个答案:

答案 0 :(得分:1)

是的,考虑到Core与WS-binding不太兼容,我们可以使用Basichttpbinding和WebHttpBinding发布服务。
使用basichttpbinding创建服务很简单,只需用下面的代码片段替换System.servicemodel部分。

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpBinding" scheme="http" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

然后我们可以通过添加服务引用来调用该服务。 enter image description here
或者,我们也像Asp.Net WebAPI一样,使用Webhttpbinding发布Restful样式服务。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-web-http-programming-model
然后,我们可以通过使用请求主体构造HTTP请求GET / POST / PUT / Delete来调用服务。由于Http协议是通用的,因此Core和.netframework都支持它。