没有成功增加WCF超时

时间:2015-08-21 09:24:39

标签: .net wcf iis

我的WCF服务在60秒后运行超时,我无法增加它。我在web.config和app.config中增加了所有超时但结果是一样的。该服务在WIN Server 2012 R2和IIS6上运行,我是否需要在操作系统级别或服务器本身上进行配置更改?

的Web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>

<system.web>
<compilation debug="false" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="600"/>
</system.web>

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="svcBehavior">
      <!-- Legen Sie die Werte unten vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Metadateninformationen zu vermeiden. -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <!-- Damit in Fehlern Ausnahmedetails zum Debuggen angezeigt werden, legen Sie den Wert unten auf "true" fest. Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Ausnahmeinformationen zu vermeiden. -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <!-- Umgeht eine CommunicationException, die auftritt, wenn der ObjectGraph überläuft -->
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>
  <!-- MTOM Binding für die Übertragung größerer Datenmengen -->
  <wsHttpBinding>
    <binding name="MTOMBinding"
             messageEncoding="Mtom"
             closeTimeout="00:10:00"
             openTimeout="00:10:00"
             sendTimeout="00:10:00"
             receiveTimeout="00:10:00"
             maxBufferPoolSize="2147483647"
             maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />
      <security mode="None">
        <transport clientCredentialType="None" />
        <message clientCredentialType="None" algorithmSuite="Default" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<services>
  <service behaviorConfiguration="svcBehavior" name="DBUpdateService.UpdateService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MTOMBinding" contract="DBUpdateService.IDBUpdater" />
  </service>
</services>

<protocolMapping>
  <remove scheme="http" />
  <add scheme="http" binding="wsHttpBinding" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2147483647" />
  </requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
    Um das Stammverzeichnis der Webanwendung beim Debuggen auszuwählen, legen Sie den Wert unten auf "true" fest.
    Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Informationen über den Webanwendungsordner zu vermeiden.
  -->
<directoryBrowse enabled="true"/>
</system.webServer>

</configuration>

的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MTOMBinding" closeTimeout="00:10:00" openTimeout="00:10:00"
      receiveTimeout="00:10:00" sendTimeout="00:30:00" bypassProxyOnLocal="false"
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
      messageEncoding="Mtom" useDefaultWebProxy="true" allowCookies="false">
          <security mode="None" />
        </binding>
      </wsHttpBinding>
    </bindings>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- Legen Sie die Werte unten vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Metadateninformationen zu vermeiden. -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <!-- Damit in Fehlern Ausnahmedetails zum Debuggen angezeigt werden, legen Sie den Wert unten auf "true" fest. Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Ausnahmeinformationen zu vermeiden. -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <!-- Umgeht eine CommunicationException, die auftritt, wenn der ObjectGraph überläuft -->
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

<client>
  <endpoint address="http://10.1.58.48/DBUpdate/UpdateService.svc"
    binding="wsHttpBinding" bindingConfiguration="MTOMBinding" contract="DBUpdater.IDBUpdater"
    name="WSHttpBinding_IDBUpdater" />
    </client>
  </system.serviceModel>
</configuration> 

完整的异常字符串: "MySql.Data.MySqlClient.MySqlException (0x80004005): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.TimeoutException: Timeout in IO operation\r\n bei MySql.Data.MySqlClient.TimedStream.StopTimer()\r\n bei MySql.Data.MySqlClient.TimedStream.Read(Byte[] buffer, Int32 offset, Int32 count)\r\n bei System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)\r\n bei MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)\r\n bei MySql.Data.MySqlClient.MySqlStream.LoadPacket()\r\n bei MySql.Data.MySqlClient.MySqlStream.ReadPacket()\r\n bei MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)\r\n bei MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)\r\n bei MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)\r\n bei MySql.Data.MySqlClient.MySqlDataReader.NextRes ult()\r\n bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)\r\n bei MySql.Data.MySqlClient.ExceptionInterceptor.Throw(Exception exception)\r\n bei MySql.Data.MySqlClient.MySqlConnection.Throw(Exception ex)\r\n bei MySql.Data.MySqlClient.MySqlConnection.HandleTimeoutOrThreadAbort(Exception ex)\r\n bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)\r\n bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()\r\n bei DBUpdateService.UpdateService.ExecuteReaderUGV(String username, String statement) in c:\\...\\UGV\\DB-Update Service\\trunk\\DBUpdateService\\UpdateService.svc.cs:Zeile 405."

第405行是ExecuteReader()http://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-sql-command.html)方法。

2 个答案:

答案 0 :(得分:0)

在您的服务器web.config文件中,尝试创建一个“默认”绑定,复制没有名称的wsHttpBinding绑定,如下所示:

<wsHttpBinding>
        <binding name="MTOMBinding" closeTimeout="00:10:00" ..... />
        <!-- here is the copy withou name -->
        <binding closeTimeout="00:10:00" ..... />
</wsHttpBinding>

答案 1 :(得分:0)

  

个MySqlException

此超时与WCF无关。您可以随意增加WCF限制,数据库仍然会关闭您。

增加方法ExecuteReaderUGV中的命令超时或优化查询。

看看我能从异常中得知什么?这是调试问题的第一个操作。坦率地说,我觉得你自己没有读过这个例外。这是一个常见的错误。现在你知道将来如何自己做这件事。