title: What is the common way to detect a client/server version mismatch
body: <p>We are implementing a client/server application to run our hardware on remote system.</p>
  
  <p>To do that we use GRPC, protobuf v3.</p>
  
  <p>When we modify the <code>.proto</code> files and recompile the client without updating the server, we got an exception with an obscure message:</p>
  
  <blockquote>
    <p>Exception was thrown by handler.</p>
  </blockquote>
  
  <p>Using GRPC, what is the common way to detect a client/server version mismatch ?</p>
  
  <p><strong>Edit: An example of modification</strong></p>
  
  <p>For example we change this (specific type for message parameter) :</p>
  
  <pre class="lang-cs prettyprint-override"><code>service RpcAcquisitionCard {
      ...
      rpc SetNumericalControlOscillator(RpcNcoConfiguration)
      ...
  }
  
  message RpcNco {
      RpcDeviceIdentifier deviceId = 1;
      core.protobuf.RpcFrequency nco1 = 2;
      core.protobuf.RpcFrequency nco2 = 3;
  }
  </code></pre>
  
  <p>To this (generic type for message parameter)</p>
  
  <pre><code>service RpcAcquisitionCard {
      ...
      rpc SetNumericalControlOscillator(RpcCommandParameter)
      ...
  }
  
  message RpcCommandParameter {
      RpcDeviceIdentifier deviceId = 1;
      google.protobuf.Any parameter = 2;
  }
  
  message RpcNco {
      core.protobuf.RpcFrequency nco1 = 1;
      core.protobuf.RpcFrequency nco2 = 2;
  }
  </code></pre>
  
  <p>Where the <code>RpcCommandParameter.parameter</code> field is a <code>RpcNco</code>.</p>