WCF:同时使用流式传输和用户名/密码身份验证

时间:2010-03-02 13:33:13

标签: .net wcf streaming wcf-security

我有一个符合以下要求的WCF服务: a)客户端请求来自服务器的文件,该文件作为Stream传输。文件可能是100MB或更大。我需要流式传输或吸盘或其他什么来确保IIS在开始发送之前没有将整个包加载到内存中。 b)客户端将传输ID以识别要下载的文件。应通过提供用户名/密码对用户进行身份验证。 c)虽然通信的用户名/密码部分需要加密,但下载文件的加密对于我们的用例是可选的。

我的其他服务,我将返回较小的文件,我使用以下绑定:

<ws2007HttpBinding>
    <binding name="ws2007HttpExtern" maxReceivedMessageSize="65536000">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>        
  </ws2007HttpBinding>

但是,正如我所说,这对流式传输没有好处(消息加密需要完整的消息加密,流式传输时不是这样)。

所以,我问微软的支持,我或多或少得到了以下建议:

<bindings>
  <basicHttpBinding>
    <binding name="basicStreaming" 
      messageEncoding="Mtom" transferMode="StreamedResponse">
      <security mode="Transport">
        <transport clientCredentialType="Basic" />
      </security>
    </binding>
</bindings>

<services>
  <service behaviorConfiguration="MyProject.WCFInterface.DownloadBehavior"
    name="MyProject.WCFInterface.DownloadFile">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicStreaming"
      contract="MyProject.WCFInterface.IDownloadFile" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>    
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="MyProject.WCFInterface.DownloadBehavior">
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

当我使用它时,我收到以下错误消息:

Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Registered base address schemes are [http].

到目前为止,我正在使用Web开发服务器(用于生产IIS7)。

我有两个问题。 a)您如何配置WCF以实现目标? b)如果MS提议是好的:我做错了什么,错误信息对我没有帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

此错误通常与在IIS 7上托管WCF服务有关。默认情况下不支持WCF,因此您可以执行一些故障排除。

  1. 您是否设法在IIS 7上托管其他WCF服务?您可能需要考虑在IIS 7服务器上添加WAS服务功能。 Here是一个很好的教程。

  2. Https要求您使用正确的SSL证书设置IIS,并为您的网站添加HTTPS绑定。 Here就是这样。

  3. 据我所知,MS建议的解决方案有效。我使用相同的方法,它工作正常。