Solution #1 - Server provides a dummy operation for client calls it regularly to let it not idle.
Solution #2 - Enable reliableSession and set receiveTimeout and inactivityTimeout to "infinite" in both the client and server.
The configuration snippet may like the following:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding" receiveTimeout="infinite">
<reliableSession inactivityTimeout="infinite" enabled="true" />
</binding>
</wsHttpBinding>
</bindings>
<services>
...
</services>
...
</system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding" receiveTimeout="infinite">
<reliableSession inactivityTimeout="infinite" enabled="true" />
</binding>
</wsHttpBinding>
</bindings>
<services>
...
</services>
...
</system.serviceModel>
You can get more detail explanation in the following reference link.
Reference in MSDN:
Binding.ReceiveTimeout Property
Reference in Paulo Reichert's Blog
WCF Reliable Sessions Puzzle