如何从soap lite客户端发送文件到wcf服务?

时间:2011-11-23 04:06:01

标签: wcf file soap service

我设置了一个wcf服务来接受基本的http绑定。我想从perl soap lite发送一个excel文件到我的wcf服务。发送此文件的最简单方法是什么?我看着mtom / mime,但它们看起来很复杂,我不知道soap lite是否使用mtom / mime。我还在考虑使用base64字符串来编码文件,然后发送它。如果我使用base64编码,我应该指定什么数据类型作为操作契约参数?

2 个答案:

答案 0 :(得分:1)

byte []将自动进行base64编码,是发送二进制附件的最强大和兼容的方式。我不会使用任何东西,除非我完全控制双方的谈话(如果我总是控制双方,我就不会使用SOAP)。

答案 1 :(得分:1)

MK。事实证明你是对的。我使用下面的代码将文件“in.xls”作为二进制文件读入$ data,然后将其作为soap lite中的值添加,并自动转换为我的wcf服务上的byte []。

open FHDL, "in.xls" or die $!;
binmode FHDL;
my ($buffer, $data, $n);
while (($n = read FHDL, $buffer, 4) != 0) {
    print "$n bytes read\n";
     $data .= $buffer ;
}
close FHDL;
$logisticOrder->attachment($data);

我只需要增加主机上的字节数组大小。

<binding name="NetTcpBinding_ImageResizerServiceContract" closeTimeout="00:01:00" 
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
                transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 
                hostNameComparisonMode="StrongWildcard" listenBacklog="10" 
                maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" 
                maxReceivedMessageSize="2147483647"> 
                                <readerQuotas maxDepth="2147483647" 
                                                          maxStringContentLength="2147483647" 
                                                          maxArrayLength="2147483647" 
                                                          maxBytesPerRead="2147483647" 
                                                          maxNameTableCharCount="2147483647" /> 
                                <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
                        </binding>

谢谢