2014-09-04 2 views
0

Мне пришлось изменить службу wcf, которую я запускал на консольном приложении, в https из-за проблемы со смешанной блокировкой контента в firefox.Изменение wcf-сервиса с Http на https делает его недоступным

Это конфиг:

<services> 
    <service name="ServiceHost.Services.BiometricCaptureService" behaviorConfiguration="Default"> 
    <endpoint address="rest" behaviorConfiguration="CorsBehavior" binding="webHttpBinding" bindingConfiguration="httpsBinding" contract="ServiceHost.IServices.IBiometricCaptureService"/> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://localhost:8502/biometrics/biometricscaptureservice.svc"/> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="CorsBehavior"> 
     <webHttp/> 
     <crossOriginResourceSharingBehavior/> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="Default"> 
     <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<extensions> 
    <behaviorExtensions> 
    <add name="crossOriginResourceSharingBehavior" type="ServiceHost.Utility.CORSBehaviorExtensionElement, ServiceHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
    </behaviorExtensions> 
</extensions> 
<bindings> 
    <webHttpBinding> 
    <binding name="httpsBinding" maxReceivedMessageSize="2147483647"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     </security> 
     <readerQuotas maxStringContentLength="2147483647" /> 
    </binding> 
    </webHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

Запуск службы не бросать какие-либо ошибки с этой конфигурацией, но я не могу ударить по конечной точке больше.

Единственной ошибкой, которую я смог получить, было следующее: «Не удалось прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом».

Может ли кто-нибудь увидеть какие-либо проблемы с этим?

+1

Попробуйте добавить 'System.Net.ServicePointManager.ServerCertificateValidationCallback = ((отправитель, сертификат, цепь, sslPolicyErrors) => правда)' в приложении консоли –

ответ

1

Я не вижу, как ваш сервис найдет сертификат шифрования.

Вы должны иметь что-то вроде этого:

<behaviors> 
<serviceBehaviors> 
    <behavior name="mySvcBehavior"> 
     <serviceCredentials> 
     <serviceCertificate findValue="xxxxxx" x509FindType="FindByThumbprint" /> 
     </serviceCredentials> 
    </behavior> 
</serviceBehaviors> 
</behaviors> 

Это довольно приличный шаг за шагом руководство по настройке HTTPS на WCF сайте. http://robbincremers.me/2011/12/27/wcf-transport-security-and-client-certificate-authentication-with-self-signed-certificates/

+0

Есть ли способ, я могу избежать того, чтобы установить сертификат и все еще иметь возможность использовать HTTPS? – RichardMc

+1

Нет ... вам нужен сертификат. Простое изменение безопасности на «Транспорт», а ваша конечная точка на «HTTPS» ничего не значит без сертификата и программирования, чтобы получить сервис, чтобы найти сертификат. Но даже если вы используете HTTPS с сертификатом, если сертификат самогенерируется, Firefox все равно будет жаловаться на то, что сертификат не будет опубликован из официального центра сертификации (Cert Authority). Возможно, вам придется добавить сертификат в доверенный список. – Brian

Смежные вопросы