Вызывающий не был аутентифицирован службой на той же машине - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть служба WCF, размещенная на сервере Windows 2016 в IIS. У меня также есть приложение для Windows, чтобы проверить этот сервис WCF. Служба работает нормально, если я запускаю это приложение Windows на любом компьютере, кроме сервера, на котором размещен WCF. Ниже моя конфигурация для WCF. Я не могу понять, что не так с сервисом.

<system.serviceModel>
<services>
  <service behaviorConfiguration="TestBehavior" name="">
    <endpoint address="" binding="wsHttpBinding" contract="" bindingConfiguration="TestSecConfig">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="TestSecConfig">

    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="TestBehavior">

      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />

      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

Мои проблемы точно такие же, как описано в этом вопросе, но решение не сработало. вызывающая сторона не была аутентифицирована службой - при использовании имени хоста на сайте и локального вызова

1 Ответ

1 голос
/ 25 апреля 2019

По умолчанию учетными данными режима безопасности Wshttpbinding являются учетные данные Windows, следующая конфигурация эквивалентна.

<bindings>
  <wsHttpBinding>
    <binding name="TestSecConfig">
    </binding>
  </wsHttpBinding>
</bindings>

<wsHttpBinding>
            <binding>
              <security mode="Message">
                <message clientCredentialType="Windows"/>
              </security>
            </binding>
          </wsHttpBinding>
    </bindings>

Таким образом, вызывающий должен указать учетные данные Windows при вызове этой службы. учетные данные Windows - это учетная запись Windows на сервере (хост, на котором размещена служба WCF).

ServiceReference2.Service1Client client = new ServiceReference2.Service1Client();
            client.ClientCredentials.Windows.ClientCredential.UserName = "administrator";
            client.ClientCredentials.Windows.ClientCredential.Password = "123456";

В зависимости от ваших требований вы также можете указать clientCredentialType = "None" .
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.wshttpbinding.security?view=netframework-4.8
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.wshttpsecurity.message?view=netframework-4.8#System_ServiceModel_WSHttpSecurity_Message
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

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