需要有关将文件发送到.NET WCF Web服务的指导

时间:2011-08-18 14:01:24

标签: .net wcf web-services soap mtom

提前感谢大家的帮助!

我正在创建用于发送电子邮件的.NET WCF Web服务(C#)..基本上是所有内部应用程序都可以使用的中央电子邮件服务。我的障碍是电子邮件附件(1个或更多)...我一直在寻找将二进制数据发送到WCF Web服务的最佳实践。需要考虑以下因素:

  • 此服务的所有请求均为内部
  • 附件是可选的,但可能包含多于1个
  • 对于多个附件,我需要确保我的服务不会超时

我已经阅读了很多关于将二进制文件转换为base64字符串的信息,但很多性能上的缺点(尤其是多个文件)让我不敢接受这种方法。所以我一直在搜索并找到一些MTOM主题,它们应该对二进制文件传输更有效。

基本上我需要指导哪种方法是此类功能的最佳实践,最好是一些示例代码,以便在我的路上发送给我。

再次感谢你的时间!

1 个答案:

答案 0 :(得分: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 Streaming:通过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" />

祝你好运, 帕特里克

相关问题