public static FileEntry addFileEntry(HttpPrincipal httpPrincipal, ..., File file, ServiceContext serviceContext)
of DLAppServiceHttp only succeeds, when you supply a File parameter that is valid on the remote server and points to the very same file as on the originating system. Whenever the file parameter does not meet these unrealistic requirements the resulting DLFileEntry object gets nevertheless created, but with a size of 0 bytes.
Why? I guess, that the File parameter gets successfully serialized and tunneled to the remote server, but accessing it there somehow results in an empty file.
I suggest to completely remove this erroneous and misleading method from the API.