Как загрузить файл в WCF вместе с идентификационными данными?
У меня есть проблема с WCF, потоковой передачей и безопасностью, которая не самая большая проблема, но я хотел узнать мнение людей о том, как я мог бы обойти это.
Мне нужно разрешить клиентам загружать файлы на сервер, и я разрешаю это, используя функцию TransferMode="StreamedRequest" в BasicHttpBinding. Когда они загружают файл, я хотел бы транзакционно поместить этот файл в файловую систему и обновить базу данных метаданными для файла (на самом деле я использую тип данных Sql Server 2008 FILESTREAM, который изначально поддерживает это). Я использую аутентификацию Windows WCF и делегирую учетные данные Kerberos SQL Server для всей моей аутентификации базы данных.
Проблема в том, что, как исключение, я получаю полезные замечания: "Потоковая передача HTTP-запросов не может использоваться в сочетании с HTTP-аутентификацией". Таким образом, для моей файловой службы загрузки я не могу передать токен аутентификации Windows вместе с моим вызовом сообщения. Даже если бы я не использовал имена входа SQL Server, я бы даже не смог идентифицировать своего вызывающего клиента по его учетным данным Windows.
Я временно обошел эту проблему, оставив незагруженный метод загрузки и заставив его сбросить файл во временное хранилище и вернуть GUID локатора. Затем клиент делает второй вызов безопасной, не потоковой службе, передавая GUID, который загружает файл из временного хранилища в базу данных с использованием проверки подлинности Windows.
Очевидно, это не идеально. С точки зрения производительности, я делаю дополнительное чтение / запись на диск. С точки зрения масштабируемости, (в принципе, с балансировщиком нагрузки) нет никакой гарантии, что я подключусь к одному и тому же серверу двумя последующими вызовами, а это означает, что временное хранилище файлов должно находиться в общем расположении, то есть не масштабируемом проекте.,
Кто-нибудь может придумать лучший способ справиться с этой ситуацией? Как я уже сказал, это не самая большая сделка, так как а) мне действительно не нужно сильно масштабировать эту штуку, пользователей не так уж много, и б) не то, чтобы эти загрузки / загрузки стали называться много. Но все же, я хотел бы знать, если я пропускаю очевидное решение здесь.
Спасибо Даниэль