2013-07-31 75 views
2

我已經創建與MySQL數據庫的wcf數據服務。我快速地從表格中獲取數據。但是當我試圖從視圖中獲取數據時,它引發超時異常。直接在db數據中嘗試時,速度非常快。從MySQL視圖WCF數據服務超時過期問題

我嘗試在web.config中設置以下內容。

<system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding name="NetHttpBinding" maxBufferPoolSize="2147483647" closeTimeout="00:01:00" 
       openTimeout="00:01:00" maxConnections="10" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:10:00" 
      maxBufferSize="524288" maxReceivedMessageSize="2147483647" /> 
     </netTcpBinding> 
    </bindings> 
    <services> 
     <service name="MyService"> 
     <endpoint address="http://localhost:59825" binding="netTcpBinding" 
      bindingConfiguration="NetHttpBinding" name="HttpBinding" /> 
     </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    </system.serviceModel> 

仍超時異常。

EDIT1:

當我與表試過,數據也越來越。我在同一個表中創建了一個視圖select *。現在也是拋出超時異常。

請幫忙。

謝謝, Saritha。

回答

1

你可能在客戶端的asp.net中設置配置。您還需要配置服務器(WCF)。

您必須在WCF配置中更改receiveTimeout

您也可以使用WCF Message Logging進行診斷。

+0

可以請您給的步驟來做到這一點? –

+0

@ Saritha.S.R http://stackoverflow.com/questions/424358/increasing-the-timeout-value-in-a-wcf-service –

+0

是的。我們的確如此。僅使用WCF服務配置編輯器添加了綁定。 –

2
<system.serviceModel> 
    <bindings> 
    <netTcpBinding> 
    <binding name="longTimeoutBinding" 
     receiveTimeout="00:10:00" sendTimeout="00:10:00"> 
     <security mode="None"/> 
    </binding> 
    </netTcpBinding> 
    </bindings> 

    <services> 
    <service name ="longTimeoutService" 
     behaviorConfiguration="longTimeoutBehavior"> 
     <endpoint address="net.tcp://localhost/longtimeout/" 
     binding="netTcpBinding" bindingConfiguration="longTimeoutBinding"> 

     </endpoint> 
    </service> 
.... 

編輯:

如果你沒有得到那麼PLZ訪問此鏈接:Explaination of different timeout types

+0

我做了同樣的,但沒有得到.. –

0

我想這無關與WCF配置。你能否檢查數據庫中視圖的權限,並確保他具有與表上相同的權限。

+0

它與視圖權限無關,因爲當我們用較少的數據嘗試同一個數據庫時,它按預期工作。 –

+0

你在哪裏託管WCF服務? IIS或控制檯? – rauts

+0

我們在IIS中託管它(.net framework 4) –

0

由於該服務似乎適用於較小的數據集,因此可能是因爲您使用的是視圖,而在數據庫服務器上正在處理結果時,它會空轉。在這種情況下你需要設置inactivityTimeout

<netTcpBinding> 
    <binding name="NetHttpBinding" 
      maxBufferPoolSize="2147483647" 
      closeTimeout="00:01:00" 
      openTimeout="00:01:00" 
      maxConnections="10" 
      receiveTimeout="00:10:00" 
      sendTimeout="00:10:00" 
      maxBufferSize="524288" 
      maxReceivedMessageSize="2147483647"> 
     <reliableSession ordered="true" 
         inactivityTimeout="00:10:00" 
         enabled="true" /> 
    </binding> 
</netTcpBinding>