如何以编程方式获取WCF绑定的详细信息

时间:2012-01-30 15:58:53

标签: asp.net wcf wcf-binding

我写了一个带有WCF后端的ASP.Net网站。该网站的一个功能是它允许用户下载从WCF服务流式传输的文件。

ASP.Net项目中的web.config文件在绑定中设置了最大文件大小(maxBufferSize和maxReceivedMessageSize)。要阻止用户下载超过此大小的文件,我需要根据web.config文件中的最大文件大小检查文件大小,我该如何处理?

我已经发现了binding.CreateBindingElements(),但我不确定如何首先获取绑定的实例。

编辑:绑定详情如下:

<binding name="BasicHttpBinding_IC_Server" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">

编辑:WCF服务有一个方法,将文件作为流返回。 ASP.Net网页获取文件,将其存储在内存流中,然后将其作为字节数组返回给用户。

如果文件太小,我会收到此错误:

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

提高缓冲区大小会修复它,但我宁愿通过将文件大小与maxBufferSize进行比较来避免此错误。

1 个答案:

答案 0 :(得分:0)

终于成功完成了自己的工作。

sr是服务参考:

System.ServiceModel.Description.ServiceEndpoint endpoint = sr.Endpoint;
System.ServiceModel.Channels.BindingElementCollection elements =
    Endpoint.Binding.CreateBindingElements();
long size = elements.Find<System.ServiceModel.Channels.TransportBindingElement>().MaxReceivedMessageSize;