Клиент WCF: предоставленная схема URI «http» недействительна; ожидаемый https

Привет, я использую WCF с CustomUserNameValidator, я использую Visual Studio local iis,

---------- Приложение WCF--

namespace AuthenticateWCF
{
    public class CustomUserNameValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
    {

        public override void Validate(string userName, string password)
        {
            if (userName == null && password == null)
                throw new ArgumentNullException();

            if (!(userName == "rrr" && password == "ppp"))
                throw new FaultException("incorrect password");


        }
    }
}

мой файл webconfig:

 <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom"
             customUserNamePasswordValidatorType="AuthenticateWCF.CustomUserNameValidator, AuthenticateWCF"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="SecureBasic">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName"/>
          </security>
      </binding>
      <binding name="wsHttp">
        <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName"  />
          </security>
      </binding>
      </basicHttpBinding>
    </bindings>
    <protocolMapping>
        <add binding="basicHttpBinding" scheme="http" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

при вызове этой службы в моем тестовом проекте,

ServiceReference1.Service1Client _client = new ServiceReference1.Service1Client();
_client.ClientCredentials.UserName.UserName = "a";
_client.ClientCredentials.UserName.Password = "bb";
var result = _client.GetData(5);

файл конфигурации веб-клиента, здесь я использую TransportWithMessageCredential, чтобы проверить имя пользователя

<binding name="BasicHttpBinding_IService1" >
    <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName"/>
    </security>
</binding>

но когда я использую это, я получаю ошибку

он предоставил недопустимую схему URI «http»; ожидается https.

Я знаю, что мы можем изменить режим безопасности, но если я изменю, это не приведет к аутентификации пользователя.

Помогите, пожалуйста.

Спасибо


person rohit panchal    schedule 21.02.2016    source источник


Ответы (1)


Поскольку вы используете режим безопасности TransportWithMessageCredential, я предполагаю, что вы используете свой сервис через https. Во-вторых, вы либо удалите следующую конфигурацию.

<protocolMapping>
    <add binding="basicHttpBinding" scheme="http" />
</protocolMapping>

Или измените его на

<protocolMapping>
    <add binding="basicHttpBinding" scheme="https" />
</protocolMapping>
person Pankaj Kapare    schedule 21.02.2016
comment
Под тегом конфигурации? - person Prashant Pimpale; 24.01.2019
comment
@PrashantPimpale: Под ‹system.serviceModel›. - person Pankaj Kapare; 24.01.2019
comment
Получение неавторизованного исключения - person Prashant Pimpale; 24.01.2019
comment
Можете ли вы проверить этот stackoverflow.com / questions / 54347576 / - person Prashant Pimpale; 24.01.2019