HTTPS на basicHttpBinding для службы WCF - PullRequest
9 голосов
/ 01 декабря 2011

Я использую IIS 7. Для него включена привязка HTTPS с номером порта 443. У меня есть служба WCF в качестве приложения на веб-сайте.Я пытаюсь внедрить HTTPS-безопасность в службу (с basicHttpBinding) на основе http://msdn.microsoft.com/en-us/library/ms729700.aspx

. Я получаю следующую ошибку: «Предоставленная схема URI« https »недействительна;ожидаемое «http».Когда я проверил журнал событий, он имеет трассировку стека следующим образом:

Stack Trace :    at System.ServiceModel.Channels.TransportChannelFactory`1.ValidateScheme(Uri via)

at System.ServiceModel.Channels.HttpChannelFactory.ValidateCreateChannelParameters(EndpointAddress remoteAddress, Uri via)

Какие изменения необходимы, чтобы он работал на HTTPS с basicHttpBinding?

Примечание: Сертификат создается с помощью «Создать самоподписанный сертификат» в IIS 7.

 <system.serviceModel>

  <behaviors>
<serviceBehaviors>
  <behavior name="serviceFaultBehavior">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="true"/>
  </behavior>
</serviceBehaviors>
  </behaviors>

  <services>
<service name="Business.TV.Clearance.Services.ServiceHandler"
         behaviorConfiguration="serviceFaultBehavior">
  <endpoint address=""
            binding="basicHttpBinding"
            contract="Business.TV.Clearance.Services.IServiceHandler"
            bindingConfiguration="httpBinding">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
</service>

  <bindings>
<basicHttpBinding>

  <binding name="httpBinding"
           maxReceivedMessageSize="2000000"
           maxBufferSize="2000000">

    <security mode="Transport">
      <transport clientCredentialType="Windows" />
    </security>


    <readerQuotas maxDepth="2147483647"
                  maxStringContentLength="2147483647"
                  maxArrayLength="2147483647" />
  </binding>
</basicHttpBinding>
  </bindings>

   <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

   <extensions>
 <behaviorExtensions>
  <add name="serviceFaultBehavior"
type="Business.TV.Clearance.Services.ServiceFaultBehaviorExtensionElement,Business.TV.Clearance.Services, Version=1.0.0.0, Culture=neutral"/>
</behaviorExtensions>
  </extensions>

</system.serviceModel>

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

Вам необходимо изменить:

<serviceMetadata httpGetEnabled="true" />

на:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
0 голосов
/ 07 ноября 2013

Пожалуйста, попробуйте заменить ниже, это должно работать.

Оригинал:

<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>

Заменить на:

<security mode="Transport">
<transport clientCredentialType="None" />
</security>
0 голосов
/ 01 декабря 2011

Пожалуйста, попробуйте как показано ниже:

<service name="UserNameWithoutSSL.UsernameWithSSLService" behaviorConfiguration="TransportWithSecurity">
  <endpoint address="" binding="basicHttpBinding" bindingConfiguration="usernameViaSSL" contract="UserNameWithoutSSL.IUsernameWithSSLService">
    <identity>
      <dns value="localhost"/>
    </identity>
  </endpoint>
  <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
  <host>
    <baseAddresses>
      <add baseAddress="https://PCName/" />
    </baseAddresses>
  </host>
</service>

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

<serviceBehaviors>
  <behavior name="TransportWithSecurity">
    <serviceCredentials>
      <serviceCertificate findValue="localhost" storeLocation="LocalMachine"
        storeName="My" x509FindType="FindBySubjectName" />
      <userNameAuthentication userNamePasswordValidationMode="Windows" />
    </serviceCredentials>
    <serviceMetadata httpsGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="true" />
  </behavior>
</serviceBehaviors>

Теперь на вашем IIS в виртуальном каталоге вам нужно сопоставить 443 для приема трафика Https и назначить сертификат, который он должен использовать для защиты транспортного уровня.

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