Служба REST WCF через SSL - PullRequest
       5

Служба REST WCF через SSL

5 голосов
/ 10 января 2011

Я пытаюсь настроить службу REST WCF через SSL и получаю:

Не удалось найти базовый адрес, который соответствует схеме https для конечной точки с привязкой WebHttpBinding. Схемы зарегистрированных базовых адресов [HTTP].

Может кто-нибудь взглянуть на мой конфигурационный файл? Спасибо.

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBinding1">
          <security>
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
       <mexHttpsBinding>
         <binding name="mexHttpsBinding1"/>
      </mexHttpsBinding>
      <webHttpBinding>
        <binding name="webHttpBinding1">
          <security mode="Transport" />
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="serviceBehavior" name="CompanyX.WebServices.WebApi">
        <endpoint address="" behaviorConfiguration="WebApiBehavior" binding="webHttpBinding"
          bindingConfiguration="webHttpBinding1" contract="CompanyX.WebServices.IWebApi">
          <identity>
           <certificateReference x509FindType="FindBySubjectName" findValue="CompanyXDev"
              isChainIncluded="false" storeName="My" storeLocation="LocalMachine" />
          </identity>
        </endpoint>
        <endpoint binding="mexHttpsBinding" bindingConfiguration="mexHttpsBinding1"
          name="mex" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WebApiBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <serviceMetadata httpsGetEnabled="true" httpGetBinding="" httpsGetBinding="webHttpBinding"
            httpsGetBindingConfiguration="webHttpBinding1" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <clientCertificate>
              <certificate findValue="CompanyXDev" x509FindType="FindBySubjectName" />
            </clientCertificate>
            <serviceCertificate findValue="CompanyXDev" x509FindType="FindBySubjectName" />
            <userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="CompanyX.WebServices.CredentialsValidator, CompanyX.WebServices" />
            <peer>
              <certificate findValue="CompanyXDev" storeLocation="LocalMachine"
                x509FindType="FindBySubjectName" storeName="My" />
            </peer>
            <issuedTokenAuthentication>
              <knownCertificates>
                <add findValue="CompanyXDev" storeLocation="LocalMachine" storeName="My"
                  x509FindType="FindBySubjectName" />
              </knownCertificates>
            </issuedTokenAuthentication>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

Ответы [ 3 ]

5 голосов
/ 11 января 2011

Позвольте мне угадать: вы запускаете свой сервис из Visual Studio на веб-сервере разработки (Cassini), не так ли?Веб-сервер разработки не поддерживает HTTPS.Вы должны разместить свой сервис в IIS и следовать совету Грега, чтобы добавить HTTPS-привязку для сайта.

3 голосов
/ 11 января 2011

Необходимо добавить привязку https в IIS.

  1. Перейдите на свой сайт в IIS
  2. Нажмите «Привязки ...» на панели «Действия» справа.
  3. Нажмите «Добавить»
  4. Выберите «https» и выберите сертификат.
2 голосов
/ 11 января 2011

Два варианта:

  1. Укажите полный адрес в конечных точках.

  2. Укажите где-нибудь в теге базовые адреса, используемые для узлаНапример:

<host>
  <baseAddresses>
    <add baseAddress="http://localhost:8000/service"/>
    <add baseAddress="https://localhost:8001/service"/>
  </baseAddresses>
</host>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...