2011-08-18 65 views
0

非常感謝大家的幫助!需要將文件發送到.NET WCF Web服務的指導

我正在創建一個用於發送電子郵件的.NET WCF Web服務(C#)..基本上所有內部應用程序都可以使用的中央電子郵件服務器。我的障礙是電子郵件附件(1或更多)...我一直在尋找將二進制數據發送到WCF Web服務的最佳做法。要考慮的以下需求:

  • 所有請求這項服務將是內部
  • 附件是可選的,但含有超過1
  • 多個附件,我需要保證我的服務犯規超時

我已經閱讀了很多有關將二進制轉換爲base64字符串的問題,但性能方面的許多缺陷(尤其是對於多個文件)讓我害怕接受這種方法。所以我繼續搜索並找到了一些MTOM主題,這些主題對於二進制文件傳輸應該更有效。

基本上我需要指導什麼方法是這種類型的功能的最佳做法,理想情況下一些示例代碼發送我的方式。

再次感謝您的時間!

回答

1

quashBox,

我只是通過這個練習上週剛去的時候,關鍵是要在流MTOM附件,這似乎是發送較大附件的最有效的方式。下面是我剛挖出來,發現是非常有幫助的一些資源...

MSDN - 如何啓用WCF博客 http://nagavitalp.blogspot.com/2011/04/transfer-large-messages-in-wcf-part-1.html

WCF流流 http://msdn.microsoft.com/en-us/library/ms789010.aspx

傳輸大的郵件:上傳文件通過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" /> 

祝你好運吧, 帕特里克

+0

所以,如果我用這個接近我服務的所有其他參數;如收件人,主題等...必須移動到標題?此外,如果我們有多個附件會發生什麼? – quashBox