Ответ 1
Возможно, вы сможете достичь этого в Silverlight с помощью , позволяющего междоменной связи между веб-сервером хосты приложения Silverlight и удаленного WCF-сервиса.
В этом случае вам нужно поместить файл clientaccesspolicy.xml в корень домена, где WCF службы:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="http://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Здесь MSDN заявляет об этом подходе:
Чтобы разрешить доступ к службе HTTPS из любого управляемого элемента управления Silverlight над HTTP-приложением, вам нужно поставить элемент < domain uri = "http://" / > * внутри вашего < allow-from > элемент.
Я не пробовал это сам, но это может стоить того. Также не забудьте проверить следующие ресурсы для получения дополнительной информации:
- Создание службы, доступной на всех границах домена
- Настройка использования веб-сервиса в клиенте Silverlight
Отключение проверки сертификата X.509 в .NET
Для приложений .NET эта примерная конфигурация WCF отключит проверку как доверенного сертификата, так и его действительности на клиенте:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="DisableServiceCertificateValidation">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="None"
revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://localhost/MyService"
behaviorConfiguration="DisableServiceCertificateValidation"
binding="wsHttpBinding"
contract="MyNamespace.IMyService"
name="MyServiceWsHttp" />
</client>
</system.serviceModel>
Альтернативным решением является предоставление пользовательской логики для проверки сертификата X.509, предоставляемого службой. В этом случае вам придется модифицировать файл конфигурации в соответствии со следующим:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="DisableServiceCertificateValidation">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="Custom"
customCertificateValidatorType="MyCertificateValidator, Client"
revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://localhost/MyService"
behaviorConfiguration="DisableServiceCertificateValidation"
binding="wsHttpBinding"
contract="MyNamespace.IMyService"
name="MyServiceWsHttp" />
</client>
</system.serviceModel>
Затем создайте класс, который получается из X509CertificateValidator для реализации вашей пользовательской логики проверки.
public class MyCertificateValidator : X509CertificateValidator
{
public override void Validate(X509Certificate2 certificate)
{
// Add custom validation logic
// Throw an exception to fail validation
}
}
Как всегда, вы можете найти более подробный пример в MSDN.