我正在尝试保护我们的WCF服务并继续遇到问题。我们利用ChannelFactory在silverlight客户端和服务器之间建立连接。
我最初使用TransportWithMessageCredential将用户名和密码从客户端发送到服务器。只要托管服务的服务器和silverlight客户端是相同的URL,我就有这个工作。一旦我更改了网址,我就收到了安全错误。我设置了错误中建议的crossdomain.xml策略,但是没有解决问题。经过一些研究后,我发现如果使用跨站点调用并传递您需要使用证书来保护邮件的用户名。
我现在正尝试在客户端设置证书。由于客户端在各种办公室使用,我们无法在每台机器上安装证书。我希望将其作为嵌入式资源,然后在创建channelfactory时设置证书。我已经看过这样做的例子,建议如下。
var channelFactory = new ChannelFactory<IYourService>();
channelFactory.Credentials.ClientCertificate.Certificate =
clientCertificate;
但是,我没有在Credentials上看到ClientCertificate的属性。我只看到用户名。
我做错了什么,或者这在Silverlight中是不可能的?
答案 0 :(得分:0)
问题原来是我的clientaccesspolicy.xml文件不正确以支持SSL。一旦我解决了这个问题,我就可以使用TransportWithMessageCredential安全模式,而不需要安装客户端证书。
对于遇到此类问题的人,您的clientaccesspolicy应如下所示。
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="https://*"/>
<domain uri="http://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>