我有一个符合以下要求的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提议是好的:我做错了什么,错误信息对我没有帮助。
感谢。