{"record":{"id":"a9f93a5bf297016a","repo":"microsoft/FASTER","slug":"wire-format-wireformat-already-registered","errorCode":null,"errorMessage":"Wire format {wireFormat} already registered","messagePattern":"Wire format (.+?) already registered","errorType":"exception","errorClass":"FasterException","httpStatus":null,"severity":"error","filePath":"cs/remote/src/FASTER.server/Servers/FasterServerBase.cs","lineNumber":72,"sourceCode":"        public FasterServerBase(string address, int port, int networkBufferSize)\n        {\n            this.address = address;\n            this.port = port;\n            this.networkBufferSize = networkBufferSize;\n            if (networkBufferSize == default)\n                this.networkBufferSize = BufferSizeUtils.ClientBufferSize(new MaxSizeSettings());\n\n            activeSessions = new ConcurrentDictionary<IMessageConsumer, byte>();\n            sessionProviders = new ConcurrentDictionary<WireFormat, ISessionProvider>();\n            activeSessionCount = 0;\n            Disposed = false;\n        }\n\n        /// <inheritdoc />\n        public void Register(WireFormat wireFormat, ISessionProvider backendProvider)\n        {\n            if (!sessionProviders.TryAdd(wireFormat, backendProvider))\n                throw new FasterException($\"Wire format {wireFormat} already registered\");\n        }\n\n        /// <inheritdoc />\n        public void Unregister(WireFormat wireFormat, out ISessionProvider provider)\n            => sessionProviders.TryRemove(wireFormat, out provider);\n\n        /// <inheritdoc />\n        public ConcurrentDictionary<WireFormat, ISessionProvider> GetSessionProviders() => sessionProviders;\n\n        /// <inheritdoc />\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public bool AddSession(WireFormat protocol, ref ISessionProvider provider, INetworkSender networkSender, out IMessageConsumer session)\n        {\n            session = null;\n\n            if (Interlocked.Increment(ref activeSessionCount) <= 0)\n                return false;\n","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/microsoft/FASTER/blob/321d872eabda6a0345c8bd76419f89723ed864ae/cs/remote/src/FASTER.server/Servers/FasterServerBase.cs#L54-L90","documentation":"FasterServerBase.Register attaches an ISessionProvider to a WireFormat enum value, but each wire format may have exactly one provider. If TryAdd fails because a provider is already registered for that wire format, FASTER throws FasterException. Registering twice is almost always an initialization-order bug, not something to retry.","triggerScenarios":"Calling server.Register(wireFormat, provider) with the same WireFormat value twice — e.g. two components each register the DefaultWireFormat, or a restart path re-registers without Unregister first.","commonSituations":"Multiple services in one host process each constructing/registrating providers for the same wire format; re-running initialization code on config reload; unit tests sharing a static server instance across tests.","solutions":["Call Register only once per WireFormat; guard with a check or a registration flag.","Call Unregister(wireFormat, out _) before re-registering to replace the provider.","Use a different WireFormat value if you genuinely need multiple backends in the same server."],"exampleFix":"// before\nserver.Register(WireFormat.DefaultWireFormat, provider1);\nserver.Register(WireFormat.DefaultWireFormat, provider2);\n// after\nserver.Unregister(WireFormat.DefaultWireFormat, out _);\nserver.Register(WireFormat.DefaultWireFormat, provider2);","handlingStrategy":"validation","validationCode":"if (!registeredFormats.Add(wireFormat)) return; // register each wire format exactly once\nserver.Register(wireFormat, provider);","typeGuard":null,"tryCatchPattern":"try { server.Register(wireFormat, provider); } catch (FasterException) { server.Unregister(wireFormat, out _); server.Register(wireFormat, provider); }","preventionTips":["Track registered wire formats in a set or singleton initializer.","Call Unregister before replacing a provider."],"tags":["csharp","faster","server","duplicate-registration"],"backgroundTag":"entity-already-exists","analyzedSha":"321d872eabda6a0345c8bd76419f89723ed864ae","analyzedAt":"2026-09-15T22:18:00.693Z","contentChangedAt":"2026-09-15T22:18:00.693Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}