提前感谢大家的帮助!
我正在创建用于发送电子邮件的.NET WCF Web服务(C#)..基本上是所有内部应用程序都可以使用的中央电子邮件服务。我的障碍是电子邮件附件(1个或更多)...我一直在寻找将二进制数据发送到WCF Web服务的最佳实践。需要考虑以下因素:
我已经阅读了很多关于将二进制文件转换为base64字符串的信息,但很多性能上的缺点(尤其是多个文件)让我不敢接受这种方法。所以我一直在搜索并找到一些MTOM主题,它们应该对二进制文件传输更有效。
基本上我需要指导哪种方法是此类功能的最佳实践,最好是一些示例代码,以便在我的路上发送给我。
再次感谢你的时间!
答案 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" />
祝你好运, 帕特里克