0

ご協力いただきありがとうございます。

電子メールを送信するための .NET WCF Web サービス (C#) を作成しています。基本的には、すべての内部アプリが使用できる中央の電子メール サービスです。私のハードルは電子メールの添付ファイル (1 つ以上) でした...バイナリ データを WCF Web サービスに送信するためのベスト プラクティスを探していました。以下を考慮する必要があります。

  • このサービスへのすべてのリクエストは内部的に行われます
  • 添付ファイルはオプションですが、1 つ以上含めることができます
  • 複数の添付ファイルの場合、サービスがタイムアウトしないようにする必要があります

バイナリをbase64文字列に変換することについてはたくさん読んだことがありますが、パフォーマンスに関する多くの欠点(特に複数のファイルの場合)が、このアプローチを受け入れるのを怖がらせました。そこで、検索を続けたところ、バイナリ ファイル転送の効率が向上すると思われる MTOM トピックがいくつか見つかりました。

基本的に、このタイプの機能のベスト プラクティスとなるアプローチについてのガイダンスと、理想的にはサンプル コードを送ってもらう必要があります。

お時間をいただきありがとうございます。

4

1 に答える 1

1

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

いくつかの高レベルのキー:

メッセージ コントラクトには単一のストリーム ボディ メンバーが必要です。他のすべての要素は、次のようにメッセージ ヘッダーに配置する必要があります (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" />

頑張ってね、パトリック

于 2011-08-18T15:21:59.573 に答える