RPC_S_PROTSEQ_NOT_SUPPORTED 0x6A7 Fix: Sequence Mismatch
This RPC error means the client and server can't agree on a transport protocol. Usually a missing or misconfigured endpoint mapper service, not a code bug.
What's Actually Happening Here
The RPC runtime tries to establish a connection using a specific protocol sequence — like ncacn_ip_tcp (TCP/IP) or ncalrpc (local named pipe). When you see 0x000006A7 (RPC_S_PROTSEQ_NOT_SUPPORTED), the server receiving the call either doesn't have that protocol sequence registered, or the endpoint mapper (EPM) can't find a matching endpoint for it.
This isn't a code bug in your application. It's an environment mismatch. The RPC subsystem on Windows is modular — each protocol sequence must be explicitly supported by the RPC service and the listening endpoint. If the client requests ncacn_np (named pipes) but the server only registered ncacn_ip_tcp, you get this exact error.
I've seen this most often in three scenarios: the endpoint mapper service is stopped or misconfigured, a firewall blocks the required RPC dynamic ports, or the client and server disagree on the protocol sequence string.
1. Endpoint Mapper Service Is Stopped or Not Running
The most common cause. The RPC Endpoint Mapper (RpcEptMapper) service maps RPC protocol sequences to actual port numbers. If it's stopped, no protocol sequences are registered — the server can't respond to any RPC call, and the client gets this error.
Check and Fix
- Open Services.msc.
- Find Remote Procedure Call (RPC) Endpoint Mapper. Not the main RPC service — the Endpoint Mapper specifically.
- If it's stopped, right-click and Start. Set its startup type to Automatic (not Manual).
- If it's already running, restart it:
net stop RpcEptMapper && net start RpcEptMapperfrom an admin cmd prompt.
The reason step 3 matters: if the Endpoint Mapper is set to Manual, it'll start on demand but can fail to initialize if the RPC subsystem starts first. Automatic ensures it's always available.
To verify it's working, run rpcinfo /p localhost (if you have the RPC tools installed) or check the event log for RPC-related errors in System under source RpcSs or RpcEptMapper.
2. Firewall Blocking RPC Dynamic Ports
RPC uses the Endpoint Mapper on port 135 (TCP), but the actual RPC traffic for most protocols uses a dynamic port range — typically 49152–65535 on Windows Server 2008 and later, or 1024–5000 on older systems. If a firewall between client and server blocks those ports, the client can connect to the mapper but can't reach the registered endpoint.
This shows up as 0x000006A7 specifically when the client attempts the protocol sequence the server advertised, but the connection fails at the transport level. The RPC runtime then reports the sequence as unsupported because the endpoint is unreachable.
Check and Fix
- On the server, open an admin PowerShell and check the RPC dynamic port range:
netsh int ipv4 show dynamicport tcp. The start port and port count define the range. - Verify the firewall on the server (Windows Firewall or a third-party one) allows inbound traffic on port 135 and the dynamic port range.
- If you can't open the full range (security policy), restrict RPC to a smaller range using the
rpccfgtool or registry keyHKLM\SOFTWARE\Microsoft\Rpc\Internet\Ports— but that's an advanced topic. Simpler: just allow the default range. - Test the connection from the client using
telnet server_IP 135— if that works but a higher dynamic port fails, the firewall's the problem.
I've seen this exact error on Windows Server 2019 when the Windows Firewall profile switched from Domain to Public and blocked RPC. Check the active firewall profile with netsh advfirewall show allprofiles.
3. Client and Server Protocol Sequence Mismatch
Less common but real. The client code explicitly specifies a protocol sequence string — like ncacn_np (named pipes) or ncacn_http (RPC over HTTP) — but the server endpoint didn't register for that sequence. The server might only support ncacn_ip_tcp.
This often happens in custom RPC applications or when using DCOM with a specific protocol binding. You'll see it in application logs, not just event logs.
Check and Fix
- On the server, query which protocol sequences are registered using
rpcinfo /p server_hostname(requires RPC tools from the Windows SDK or a Sysinternals tool likerpcdump). - Look at the UUID and annotation columns — each entry shows the protocol sequence (e.g.,
ncacn_ip_tcp). If your client uses something else, that's your mismatch. - Change the client to use a protocol sequence the server supports. In C/C++ RPC code, that's the
RpcBindingFromStringBindingcall with the correct string. For DCOM, modify the client'sRPC_NCA_FLAGSor DCOM configuration viadcomcnfg. - If you control the server, add support for the missing protocol sequence by registering it in the server's .idl file or runtime configuration.
A quick test: on the client, run rpcinfo /s server_hostname to see if the server's endpoint mapper responds at all. If it does but the specific sequence is missing, you've confirmed the mismatch.
Quick-Reference Summary
| Cause | Diagnosis Command | Fix |
|---|---|---|
| Endpoint Mapper stopped | sc query RpcEptMapper | Start the service, set to Automatic |
| Firewall blocking dynamic ports | netsh int ipv4 show dynamicport tcp | Allow port 135 and dynamic range |
| Protocol sequence mismatch | rpcinfo /p server | Align client sequence with server's registered ones |
Start with the endpoint mapper service — it's trivial to check and the most common culprit. If that's fine, look at the firewall. Protocol sequence mismatches are rare but easy to diagnose once you know what to query.
Was this solution helpful?