WCF大数据量传输

对于WCF服务来说,默认情况下,其接收的最大数据量为65535字节。如超过这个范围,就必须修改默认设置。

1 客户端。客户端接收的最大数据值由传输协议的MaxReceivedMessageSize确定,示例如下:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
class Program
{
static void Main( string [] args)
{

Console.WriteLine(
" Invocate self-host GetPictureFilestreem service... ... " );

XmlDictionaryReaderQuotas quotas
= new XmlDictionaryReaderQuotas();
quotas.MaxArrayLength
= 65535 ;


BasicHttpBinding httpBinding
= new BasicHttpBinding();
httpBinding.ReaderQuotas
= quotas;
httpBinding.MaxReceivedMessageSize
= 6553600 ;
EndpointAddress httpAddress
= new EndpointAddress( " http://localhost:8888/PictureStreemTransfers " );

WCFStreemTransfersClient client
= new WCFStreemTransfersClient(httpBinding, httpAddress);
string desPath = System.Environment.CurrentDirectory + " \\result.jpg " ;
byte [] buf = client.GetPictureFilestreem();
File.WriteAllBytes(desPath,buf);

Console.WriteLine(
@" write file = " + desPath);
Console.Read();

}
}

上例中调用服务端的GetPictureFilestreem()契约,获取返回的2进制数据流,写入result.jpg文件。

由于数据流的长度大于65535,所以通过设定

    quotas.MaxArrayLength = 65535;
            httpBinding.ReaderQuotas = quotas;
            httpBinding.MaxReceivedMessageSize = 6553600;

修改客户端接收的最大数据值。

上例中关联client定义如下:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
class WCFStreemTransfersClient : ClientBase < IStreemTransfers > , IStreemTransfers
{
public WCFStreemTransfersClient() : base ()
{ }

public WCFStreemTransfersClient( string endpointName)
:
base (endpointName)
{ }

public WCFStreemTransfersClient(Binding binding, EndpointAddress address)
:
base (binding, address)
{ }

public byte [] GetPictureFilestreem() {
return this .Channel.GetPictureFilestreem();
}
}

// IStreemTransfers
[ServiceContract]
public interface IStreemTransfers
{
[OperationContract]
byte [] GetPictureFilestreem();
}

 

 

2 服务端。

wcf并没有限制服务端发送数据的大小,因此服务端简单实现该服务契约就可以了。

服务契约接口:

 
  
[ServiceContract]
public interface IStreemTransfers
{
[OperationContract]
byte [] GetPictureFilestreem();
}

 

 

//服务端实现

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
class Program
{
static void Main( string [] args)
{
ServiceHost host
= new ServiceHost( typeof (PictureStreemTransfers));
host.Open();
Console.WriteLine(
" 服务中 " );
Console.Read();
Console.Read();
}
}

// GetPictureFilestreem
public class PictureStreemTransfers : IStreemTransfers
{
public byte [] GetPictureFilestreem() {
try
{
string path = System.Environment.CurrentDirectory + " \\test.jpg " ;
Console.WriteLine(
" Server send File = " + path);
return File.ReadAllBytes(path);
}
catch (Exception ex) {
Console.WriteLine(
" Server Error: " + ex.Message);
return null ;
}
}

 

 

转载于:https://www.cnblogs.com/zhongxg/archive/2010/06/04/1751488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值