Если вы не хотите (или не можете по законным причинам) изменить привязку или использовать потоковую передачу, вы можете использовать какой-нибудь метод с подписью в следующем формате:
void UploadFile(string fileName, long offset, byte[] data)
Вместо того, чтобы отправлять весь файл, вы отправляете небольшие пакеты и сообщаете, куда следует поместить данные. Конечно, вы можете добавить больше данных, например, размер файла, CRC файла, чтобы узнать, была ли передача успешной, и т. Д.