【问题标题】:How do I get details of WCF bindings programatically如何以编程方式获取 WCF 绑定的详细信息
【发布时间】:2012-01-30 15:58:53
【问题描述】:

我编写了一个带有 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 进行比较来避免此错误。

【问题讨论】:

  • 澄清一下,您的文件实际上是“流式传输”还是刚刚下载?在流式传输中,我相信约束设置更多的是围绕块的大小而不是文件本身。您可以发布您的 OperationContract 定义吗?
  • 另外,听起来您希望网站访问有关在应用程序其他地方公开的端点的信息。这不会是您在 WCF 服务本身的上下文中执行检查的地方,对吧?
  • @Rich - 感谢您的 cmets,我已经在我的帖子中添加了一些详细信息,应该可以回答您的问题。

标签: asp.net wcf wcf-binding


【解决方案1】:

终于自己解决了。

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; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多