如何使用SSL保护启用Silverlight的WCF Web服务?

时间:2009-05-09 00:50:21

标签: wcf silverlight

如何使用SSL保护启用Silverlight的WCF Web服务?我试过设置它类似于SSL保护的常规WCF服务,但它似乎不起作用。您在 Web.Config 中设置了什么,以及您在Silverlight的 ServiceReferences.ClientConfig 中设置了什么?

我注意到在Silverlight客户端应用程序的ServiceReferences.ClientConfig文件中,“绑定”标记仅允许basicHttpBinding和NOT wsHttpBinding。这是否意味着您无法保护启用Silverlight的WCF服务?如果有,有更好的方法来保护它吗?

4 个答案:

答案 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服务,您必须执行以下步骤:

  1. 使用Visual Studio 2010创建标准的启用Silverlight的WCF Web服务
  2. 更改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>
    
  3. 不要使用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)

Silverlight不支持WS * - 基本上将客户端配置中的URL更改为https:// url - 这就是你能做的一切