Изменение службы WCF для совместимости с .NET Framework и .NET Core Callers - PullRequest
1 голос
/ 05 июня 2019

TL; DR У меня есть существующая служба WCF, размещенная как служба Windows, которую я хочу изменить, чтобы она могла вызываться существующим приложением .NET Framework 4.7, а также новым ядром .NET2.2 приложениеКакой самый простой подход к решению этой проблемы?

Полное объяснение: У меня есть существующее веб-приложение (назовите его «A»), работающее на .NET Framework 4.7.Он общается с существующей службой WCF 'B' (службой Windows) также в .NET 4.7.Они общаются через NetTcpBinding.

Я создаю новое веб-приложение C на .NET Core 2.2.Мне нужно, чтобы он поговорил с существующей службой B. Я могу изменять A и B столько, сколько нужно, но время и деньги ограничены.Кроме того, B использует API, который работает только в .NET Framework, поэтому он может не конвертироваться для работы в .NET Core, к моему большому разочарованию.

Служба B крошечная.Весь выставленный контракт состоит из 5 методов.Безопасность действительно минимальна.Это приложение только для внутренней сети в крошечной компании.

Какой самый быстрый и простой способ изменить существующую службу WCF B (и A, если необходимо), чтобы она могла общаться как с приложениями A, так и с C?

Полагаю, мне следует просто изменить привязку WCF в приложениях A и B на что-то, с чем я могу легко поговорить, используя HttpClient на C;если да, то какая это привязка и как мне использовать HttpClient для взаимодействия с ней?Кроме того, есть ли какие-то скрытые "хитрости", чтобы изменить привязку WCF с NetTcpBinding на что-то еще, что меня укусит?

1 Ответ

1 голос
/ 06 июня 2019

Да, мы можем опубликовать сервис с помощью Basichttpbinding и WebHttpBinding, учитывая, что ядро ​​плохо совместимо с WS-привязкой.
Использовать 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
Или мы публикуем службу спокойного стиля, используя Webhttpbinding, точно так же, как Asp.Net WebAPI.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-web-http-programming-model
Затем мы можем вызвать службу, создав HTTP-запрос,GET / POST / PUT / Delete, с телом запроса.Он поддерживается как Core, так и .netframework, поскольку протокол Http является общим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...