您可以通过允许承载 Silverlight 应用程序的 Web 服务器和远程 WCF 服务之间的跨域通信在 Silverlight 中实现此目的。
在这种情况下,您需要在托管 WCF 服务的域的根目录中放置一个clientaccesspolicy.xml文件:
<?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 对这种方法的陈述:
要允许从托管在 HTTP 应用程序上的任何 Silverlight 控件访问 HTTPS 服务,您需要将<domain uri=”http:// ” />* 元素放在<allow-from>元素中。
我自己没有尝试过,但值得一试。另请务必查看以下资源以获取更多详细信息:
在 .NET 中禁用 X.509 证书验证
对于 .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 上找到更详细的示例。