У меня есть служба WCF со следующими требованиями:
а) Клиент запрашивает файл с сервера, который передается в виде потока. Файлы могут быть 100 МБ или больше. Мне нужно потоковое или чакирование или что-то еще, чтобы убедиться, что IIS не загружает весь пакет в память перед началом его отправки.
б) Клиент передаст идентификатор для идентификации файла, который будет загружен. Пользователь должен пройти аутентификацию, указав имя пользователя / пароль.
c) Хотя часть имени пользователя и пароля сообщения должна быть зашифрована, шифрование загруженного файла является необязательным для нашего варианта использования.
В других моих службах, куда я возвращаю файлы меньшего размера, я использую следующую привязку:
<ws2007HttpBinding>
<binding name="ws2007HttpExtern" maxReceivedMessageSize="65536000">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</ws2007HttpBinding>
Но, как я уже сказал, это плохо для потоковой передачи (для шифрования сообщений требуется шифрование всего сообщения, а при потоковой передаче это не так).
Итак, я обратился в службу поддержки Microsoft и получил более или менее следующее предложение:
<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].
Пока что я использую сервер веб-разработки (для производственной IIS7).
У меня есть два вопроса.
а) Как бы вы настроили WCF для достижения цели?
б) Если предложение MS хорошо: что я делаю неправильно, сообщение об ошибке мне не очень помогает.
Спасибо.