如何使用SSL保护启用Silverlight的WCF Web服务?我试过设置它类似于SSL保护的常规WCF服务,但它似乎不起作用。您在 Web.Config 中设置了什么,以及您在Silverlight的 ServiceReferences.ClientConfig 中设置了什么?
我注意到在Silverlight客户端应用程序的ServiceReferences.ClientConfig文件中,“绑定”标记仅允许basicHttpBinding和NOT wsHttpBinding。这是否意味着您无法保护启用Silverlight的WCF服务?如果有,有更好的方法来保护它吗?
答案 0 :(得分:11)
我配置了三个关键位置以在我自己的应用中使用https。
<强>的Web.config 强>
在行为标记中包含以下行:
<serviceMetadata httpsGetEnabled="true"/>
对于MEX端点,请确保使用https协议:
<endpoint address="mex" binding="mexHttpsBinding"
contract="IMetadataExchange" />
创建自定义绑定。重要的是运输安全:
<basicHttpBinding>
<binding name="myServicesBinding">
<security mode="Transport"/>
</binding>
</basicHttpBinding>
您还可以包含通常的授权内容:
<authorization>
<allow users="?"/>
<deny users="*"/>
</authorization>
<强> Silverlight的强>
在Silverlight端,要么将ServiceReference指向现在的安全服务,要么在代码中手动设置连接。 ServiceReferences.ClientConfig文件中应包含安全性内容:
<security mode="Transport"/>
代码版本如下所示:
BasicHttpBinding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
可能有更复杂的事情可以做,但对大多数人来说这应该足够好了。
答案 1 :(得分:3)
在ServiceReferences.ClientConfig文件中 “绑定”标记仅允许的Silverlight客户端应用程序 basicHttpBinding和NOT wsHttpBinding。 这是否意味着您无法保护启用Silverlight的功能 WCF服务?
不,这并不意味着。您可以拥有basicHttpBinding
并仍然为其分配传输级安全性(使用HTTPS的HTTPS)。这应该不是问题。
马克
PS:其中许多链接为您提供了更多的见解和众所周知的“AHA!” : - )
答案 2 :(得分:3)
要使用SSL创建启用Silverlight的WCF Web服务,您必须执行以下步骤:
更改webconfig.xml的3个位置:
一个。在serviceMetadata中,将httpGetEnabled更改为httpsGetEnabled,如下所示:
<behaviors >
<serviceBehaviors >
<behavior name="" >
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
湾在绑定中将httpTransport更改为httpsTransport:
<bindings>
<customBinding>
<binding name="Project.Web.YourService.customBinding0">
<binaryMessageEncoding/>
<httpsTransport/>
</binding>
</customBinding>
</bindings>
℃。在端点更改绑定=“mexHttpBinding”到binding =“mexHttpsBinding”:
<service name="Project.Web.YourService.YourService">
<endpoint address="" binding="customBinding" bindingConfiguration="Project.Web.YourService.customBinding0"
contract="Project.Web.YourService.YourService" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
不要使用ServiceReferences.ClientConfig。在代码后面创建所有内容 - 它很容易在服务器上部署:
CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), new HttpsTransportBindingElement());
YourServiceReference.YourServiceClient service = new YourServiceReference.YourServiceClient (binding, new EndpointAddress(new Uri( "https:yourhostname/YourService.svc").AbsoluteUri));
service.YourMethodCompleted += new EventHandler<YourServiceReference.YourMethodCompleted EventArgs>(service_YourMethodCompleted );
service.YourMethodAsync();
答案 3 :(得分:-2)