2011-08-18 62 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