diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index d51b88c5..a5b7b83 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -4,8 +4,10 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/server_cancel_request.dart';
+import 'package:analysis_server/src/handler/legacy/server_get_version.dart';
+import 'package:analysis_server/src/handler/legacy/server_set_subscriptions.dart';
 import 'package:analysis_server/src/handler/legacy/server_shutdown.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
 
@@ -19,51 +21,28 @@
   /// [server].
   ServerDomainHandler(this.server);
 
-  Response cancelRequest(Request request) {
-    final id = ServerCancelRequestParams.fromRequest(request).id;
-    server.cancelRequest(id);
-
-    return ServerCancelRequestResult().toResponse(request.id);
-  }
-
-  /// Return the version number of the analysis server.
-  Response getVersion(Request request) {
-    return ServerGetVersionResult(
-      server.options.reportProtocolVersion ?? PROTOCOL_VERSION,
-    ).toResponse(request.id);
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     try {
       var requestName = request.method;
       if (requestName == SERVER_REQUEST_GET_VERSION) {
-        return getVersion(request);
+        ServerGetVersionHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_SET_SUBSCRIPTIONS) {
-        return setSubscriptions(request);
+        ServerSetSubscriptionsHandler(server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_SHUTDOWN) {
         ServerShutdownHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_CANCEL_REQUEST) {
-        return cancelRequest(request);
+        ServerCancelRequestHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       }
     } on RequestFailure catch (exception) {
       return exception.response;
     }
     return null;
   }
-
-  /// Subscribe for services.
-  ///
-  /// All previous subscriptions are replaced by the given set of subscriptions.
-  Response setSubscriptions(Request request) {
-    server.serverServices =
-        ServerSetSubscriptionsParams.fromRequest(request).subscriptions.toSet();
-
-    server.requestStatistics?.isNotificationSubscribed =
-        server.serverServices.contains(ServerService.LOG);
-
-    return ServerSetSubscriptionsResult().toResponse(request.id);
-  }
 }
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_cancel_request.dart b/pkg/analysis_server/lib/src/handler/legacy/server_cancel_request.dart
new file mode 100644
index 0000000..5702aba
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_cancel_request.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `server.cancelRequest` request.
+class ServerCancelRequestHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerCancelRequestHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    final id = ServerCancelRequestParams.fromRequest(request).id;
+    server.cancelRequest(id);
+    sendResult(ServerCancelRequestResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_get_version.dart b/pkg/analysis_server/lib/src/handler/legacy/server_get_version.dart
new file mode 100644
index 0000000..21eb232
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_get_version.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_constants.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `server.getVersion` request.
+class ServerGetVersionHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerGetVersionHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    sendResult(ServerGetVersionResult(
+      server.options.reportProtocolVersion ?? PROTOCOL_VERSION,
+    ));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_set_subscriptions.dart b/pkg/analysis_server/lib/src/handler/legacy/server_set_subscriptions.dart
new file mode 100644
index 0000000..67633bf
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_set_subscriptions.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `server.setSubscriptions` request.
+class ServerSetSubscriptionsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerSetSubscriptionsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    try {
+      server.serverServices = ServerSetSubscriptionsParams.fromRequest(request)
+          .subscriptions
+          .toSet();
+      server.requestStatistics?.isNotificationSubscribed =
+          server.serverServices.contains(ServerService.LOG);
+    } on RequestFailure catch (exception) {
+      sendResponse(exception.response);
+      return;
+    }
+    sendResult(ServerSetSubscriptionsResult());
+  }
+}
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
index b7bfaa8..9c26bd7 100644
--- a/pkg/analysis_server/test/domain_server_test.dart
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -5,74 +5,52 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/domain_server.dart';
-import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
-import 'package:analysis_server/src/utilities/mocks.dart';
-import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/instrumentation/instrumentation.dart';
-import 'package:analyzer/src/generated/sdk.dart';
 import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'analysis_server_base.dart';
 import 'constants.dart';
 import 'mocks.dart';
 
 void main() {
-  late AnalysisServer server;
-  late ServerDomainHandler handler;
-  late MockServerChannel serverChannel;
-
-  setUp(() {
-    serverChannel = MockServerChannel();
-    var resourceProvider = MemoryResourceProvider();
-    server = AnalysisServer(
-        serverChannel,
-        resourceProvider,
-        AnalysisServerOptions(),
-        DartSdkManager(''),
-        CrashReportingAttachmentsBuilder.empty,
-        InstrumentationService.NULL_SERVICE);
-    handler = ServerDomainHandler(server);
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ServerDomainTest);
   });
+}
 
-  group('ServerDomainHandler', () {
-    test('getVersion', () {
-      var request = ServerGetVersionParams().toRequest('0');
-      var response = handler.handleRequest(request, NotCancelableToken())!;
-      expect(
-          response.toJson(),
-          equals({
-            Response.ID: '0',
-            Response.RESULT: {VERSION: PROTOCOL_VERSION}
-          }));
+@reflectiveTest
+class ServerDomainTest extends PubPackageAnalysisServerTest {
+  Future<void> test_getVersion() async {
+    var request = ServerGetVersionParams().toRequest('0');
+    var response = await handleSuccessfulRequest(request);
+    expect(
+        response.toJson(),
+        equals({
+          Response.ID: '0',
+          Response.RESULT: {VERSION: PROTOCOL_VERSION}
+        }));
+  }
+
+  Future<void> test_setSubscriptions_invalidServiceName() async {
+    var request = Request('0', SERVER_REQUEST_SET_SUBSCRIPTIONS, {
+      SUBSCRIPTIONS: ['noSuchService']
     });
+    var response = await handleRequest(request);
+    expect(response, isResponseFailure('0'));
+  }
 
-    group('setSubscriptions', () {
-      test('invalid service name', () {
-        var request = Request('0', SERVER_REQUEST_SET_SUBSCRIPTIONS, {
-          SUBSCRIPTIONS: ['noSuchService']
-        });
-        var response = handler.handleRequest(request, NotCancelableToken());
-        expect(response, isResponseFailure('0'));
-      });
+  Future<void> test_setSubscriptions_success() async {
+    expect(server.serverServices, isEmpty);
+    // send request
+    var request =
+        ServerSetSubscriptionsParams([ServerService.STATUS]).toRequest('0');
+    await handleSuccessfulRequest(request);
+    // set of services has been changed
+    expect(server.serverServices, contains(ServerService.STATUS));
+  }
 
-      test('success', () {
-        expect(server.serverServices, isEmpty);
-        // send request
-        var request =
-            ServerSetSubscriptionsParams([ServerService.STATUS]).toRequest('0');
-        var response = handler.handleRequest(request, NotCancelableToken());
-        expect(response, isResponseSuccess('0'));
-        // set of services has been changed
-        expect(server.serverServices, contains(ServerService.STATUS));
-      });
-    });
-
-    test('shutdown', () async {
-      var request = ServerShutdownParams().toRequest('0');
-      var response = await serverChannel.sendRequest(request);
-      expect(response, isResponseSuccess('0'));
-    });
-  });
+  Future<void> test_shutdown() async {
+    var request = ServerShutdownParams().toRequest('0');
+    await handleSuccessfulRequest(request);
+  }
 }
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 2aef55f..38658de 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -145,6 +145,8 @@
 vm_snapshot_analysis/test/*: SkipByDesign # Only meant to run on vm
 
 [ $system == windows ]
+dds/test/devtools_server/devtools_server_connection_test: Pass, Slow
+dds/test/devtools_server/devtools_server_test: Pass, Slow
 front_end/test/fasta/bootstrap_test: Skip # Issue 31902
 front_end/test/fasta/strong_test: Pass, Slow, Timeout
 front_end/test/fasta/text_serialization_test: Pass, Slow, Timeout
diff --git a/tools/VERSION b/tools/VERSION
index 40589b0..0ec8410 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 265
+PRERELEASE 266
 PRERELEASE_PATCH 0
\ No newline at end of file
