2015-03-25 2 views
1

У меня есть служба WCF, которая получит идентификатор и вернет pdf-файл, основанный на идентификаторе. Я предполагаю, что лучший способ сделать это - преобразовать файл pdf в какую-то строку и затем вернуть его. Однако я не уверен, какой поток использовать (Stream, Filestream, or MemoryStream).Что было бы самым эффективным способом преобразования pdf в поток

Я знаю, что могу читать pdf-файл в байтовый массив, а затем делать что-то с ним с помощью MemoryStream, но я чувствую, что есть более эффективный способ.

Я пытался делать то, что было предложено в этом посте здесь: How to convert a pdf to a memory stream

жесткого кодирования путь к файлу, чтобы вернуться, как так:

return File(@"C:\MyFile.pdf", "application/pdf"); 

Просто чтобы посмотреть, что происходит, но получаю сообщение об ошибке на File говоря: `` System.IO.File 'является «типом», но используется как «переменная».

Может ли кто-нибудь дать небольшую информацию?

EDIT

Это в настоящее время, что я работаю на:

[OperationContract] 
[WebInvoke(Method = "GET", 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, 
    UriTemplate = "/GetInvoiceFile")] 
Stream GetInvoiceFile(string id); 

public Stream GetInvoiceFile(string BillingPeriodId) 
{ 
    byte[] bytes = File.ReadAllBytes(@"C:\pdf-test.pdf"); 
    return new MemoryStream(bytes); 
} 

Я просто не знаю точно, как я хотел бы изменить свой OperationContract вернуть PDF. Есть идеи?

+2

'Файл' является вспомогательной функцией для контроллеров MVC и не применим к WCF. –

+0

@DStanley - Я должен был подумать, что это будет проблемой. Что было бы эффективным способом сделать это с помощью WCF? – scapegoat17

ответ

2

Ответ зависит от того, что у вас есть. Кажется, у вас есть путь к файлу как string. Вероятно, ваш метод WCF возвращает byte[]. Вам как-то нужно эффективно преобразовать этот путь в byte[].

Вы можете сделать это, используя File.ReadAllBytes(string path).

WCF также поддерживает потоковые записи, но это немного сложнее, а выигрыши в производительности сомнительны для небольших файлов.

Тот факт, что вы пытались указать тип MIME ("application/pdf"), говорит мне, что вы действительно не понимаете разницу между сервисом WCF и службой HTTP. Исследование этого домашнего задания для вас.

+0

Спасибо за ответ. У меня уже установлен файл 'byte []'. Кажется, я бы хотел написать его потоку на данный момент. Какой был бы лучший способ достичь этого? – scapegoat17

+0

Что возвращает ваш метод WCF? Байт []? Ваша фиксация в потоках кажется необоснованной. – usr

+0

Чтобы ответить на ваш вопрос буквально: самым эффективным и простым способом преобразования байта [] в Stream является новый MemoryStream (myByteArray). Я сомневаюсь, что это то, что вам нужно. – usr

Смежные вопросы

 Смежные вопросы