/// <summary>
 /// Creates a MwsCall and sends the request.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="type"></param>
 /// <param name="requestData"></param>
 /// <returns></returns>
 public T Call <T>(
     IMwsRequestType <T> type,
     IMwsObject requestData) where T : IMwsObject
 {
     try
     {
         var servicePath   = type.ServicePath;
         var operationName = type.OperationName;
         var mc            = NewCall(servicePath, operationName);
         requestData.WriteFragmentTo(mc);
         var responseReader = mc.Invoke();
         var rhmd           = mc.GetResponseMetadataHeader();
         var response       = MwsUtil.NewInstance <T>();
         type.SetResponseHeaderMetadata(response, rhmd);
         response.ReadFragmentFrom(responseReader);
         return(response);
     }
     catch (Exception e)
     {
         throw type.WrapException(e);
     }
 }