2012-01-30 78 views
0

我已經編寫了一個帶有WCF後端的ASP.Net網站。該網站的一個特點是它允許用戶下載從WCF服務流式傳輸的文件。如何以編程方式獲取WCF綁定的詳細信息

ASP.Net項目中的web.config文件在綁定中設置了最大文件大小(maxBufferSize和maxReceivedMessageSize)。要阻止用戶下載超過此大小的文件,我需要檢查文件大小與web.config文件中的最大文件大小,我該如何解決這個問題?

我已經發現了有關binding.CreateBindingElements(),但我不確定如何獲得綁定的實例在第一個地方。

EDIT:裝訂細節如下:

<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文件大小來避免這個錯誤。

+0

只是爲了澄清,是您的文件實際上是「流傳輸」或只是下載?在流媒體中,我相信約束設置更多地圍繞塊的大小而不是文件本身。你能發佈你的OperationContract定義嗎? – Rich 2012-01-30 17:21:49

+0

此外,它聽起來像你希望網站訪問有關在應用程序中的其他地方暴露的端點的信息。這不會是你在WCF服務本身的上下文中執行檢查的地方,對嗎? – Rich 2012-01-30 17:25:51

+0

@Rich - 感謝您的評論,我在帖子中添加了一些細節,可以回答您的問題。 – GrandMasterFlush 2012-01-31 09:53:12

回答

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; 
相關問題