internal ActionResult Invoke(ServiceAction action, IDictionary <string, string> arguments, int retry)
 {
     if (soap_adapter == null)
     {
         if (service_description.ControlUrl == null)
         {
             throw new InvalidOperationException(
                       string.Format("{0} does not have a control URL.", service_description));
         }
         soap_adapter = new SoapInvoker(service_description.ControlUrl);
     }
     try {
         return(soap_adapter.Invoke(action, arguments, retry));
     } catch (WebException e) {
         if (e.Status == WebExceptionStatus.Timeout)
         {
             service_description.CheckDisposed();
         }
         throw e;
     }
 }