Требуется руководство по отправке файлов в веб-службу .NET WCF - PullRequest
0 голосов
/ 18 августа 2011

Заранее благодарю всех за помощь!

Я создаю веб-службу .NET WCF (C #) для отправки электронных писем ... в основном центральную службу электронной почты, которую могут использовать все внутренние приложения.Мое препятствие - вложения электронной почты (1 или более) ... Я искал лучшие практики для отправки двоичных данных в веб-службу WCF.Необходимо учитывать следующее:

  • все запросы к этой услуге будут внутренними
  • вложения являются необязательными, но могут содержать более 1
  • для нескольких вложений, которые мне нужнычтобы убедиться, что время моей службы не истекло

Я много читал о преобразовании двоичного файла в строку base64, но многие недостатки в производительности (особенно с несколькими файлами) испугали меня, чтобы принять этот подход.Поэтому я продолжил поиск и нашел некоторые темы MTOM, которые, как предполагается, более эффективны для передачи двоичных файлов.

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

Еще раз спасибо заранее за ваше время!

1 Ответ

1 голос
/ 18 августа 2011

quashBox,

Я только что прошел это упражнение только на прошлой неделе, ключ заключается в потоковой передаче вложений MTOM, кажется, это наиболее эффективный способ отправки больших вложений. Вот несколько ресурсов, которые я только что выкопал и нашел очень полезными ...

MSDN - Как включить потоковую передачу http://msdn.microsoft.com/en-us/library/ms789010.aspx

Передача больших сообщений в блоге WCF. http://nagavitalp.blogspot.com/2011/04/transfer-large-messages-in-wcf-part-1.html

Поток WCF: загрузка файлов по HTTP http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html

Несколько высокоуровневых клавиш:

в ваших контрактах с сообщениями должен быть один элемент тела Stream, все остальные элементы должны быть помещены в заголовок сообщения, например (извините за VB.NET, но магазин, которым я сейчас пользуюсь):

<MessageContract()>
Public Class StreamAttachmentRequest

<MessageHeader(MustUnderstand:=True)>
Public Property AttachmentName As String

<MessageBodyMember(Order:=1)>
Public Property Attachment As Stream

End Class

ваша привязка должна быть настроена для потоковой передачи MTOM. как ...

   <bindings>

    <basicHttpBinding>

    <binding name="TestCaseBasicBinding"

    messageEncoding="Mtom"

    transferMode="StreamedRequest"

    maxReceivedMessageSize="2147483647"

    closeTimeout="00:30:00"

    openTimeout="00:30:00"

    receiveTimeout="00:30:00"

    sendTimeout="00:30:00">

вам может потребоваться установить максимальную длину запроса, если вы передаете действительно большие вложения

 <httpRuntime executionTimeout="1800" maxRequestLength="2097151" />

Удачи с этим, Patrick

...