Problem Overview
When a custom OPC DA client application attempts to connect to a remote SIMATIC NET OPC server using the Automation Interface (the SiemensOPCDAAutomation 2.0 wrapper that exposes the OPCServer, OPCGroup, and OPCItems classes), the MyOPCServer.Connect(ServerName) call in the VB.NET application fails with the message:
The RPC server is unavailable (Exception from HRESULT: 0x800706BA)
Supporting telemetry captured in the application, the COM trace file, and the Windows event log pinpoints the failure to the COM activation layer rather than the network or RPC endpoint mapper:
- Visual Basic
Err.Number = 462withSource = Interop.OPCSiemensDAAutomation -
SOPCDAAUTO_ERRline:ERR 'CoCreateInstance' OPCAutoServer::Connect, [hr=0x800706BA] ProgID: 'OPC.SimaticNET' -
SOPCDAAUTO_ERRline:ERR 'gpOPC->GetClassDetails' OPCAutoServer::GetOPCServers, [hr2=0x80040154] - Windows Event Viewer (System log): DCOM was unable to communicate with the computer "NAME" using any of the configured protocols — event ID 10010
Diagnostic context: the same client can call GetOPCServers(RemoteMachineName) without error, and the Siemens-supplied OPC Scout test tool can read/write tags from the same remote machine, which proves the RPC plumbing (port 135 + dynamic ports) and the server-side DCOM permissions are correct. The asymmetry between the working reference client and the failing custom client is the diagnostic fingerprint of a missing COM class registration on the client, not a network, firewall, or DCOM authentication failure.
Environment & Affected Components
| Component | Specification |
|---|---|
| Server hardware | SIMATIC MICROBOX PC (industrial PC) |
| Server OS | Windows XP Embedded SP2 |
| Server framework | Microsoft .NET Framework 1.1 |
| Server software | SIMATIC NET PC software (OPC DA Server) |
| Client OS | Windows XP SP3 |
| Client framework | Microsoft .NET Framework 3.5 |
| Client IDE | Microsoft Visual Studio 2008 Professional |
| Client runtime | OPC Automation 2.0 wrapper (Interop.OPCAutomation.dll → opcdaauto.dll) |
| Network | Single Layer-2 switch, same Workgroup, no domain controller |
| Protocol tested | Connection-oriented TCP/IP (Default Protocols in dcomcnfg) |
| PLC protocol | S7 communication via ISO-on-TCP (port 102) to S7-300/400 |
The configuration is functional at the GetOPCServers call, which uses IOPCServerList::EnumClassesOfCategories to perform a CLSID enumeration over the local registry and the remote opcenum service. The failure point is the subsequent CoCreateInstance(CLSID_OPCServer, ..., ProgID="OPC.SimaticNET", ...), which is a remote COM activation that depends on both the local COM proxy/stub registration and the remote server's AppID launch permissions.
The same failure pattern applies to all SIMATIC NET versions from V6.x through V8.1 that ship the COM-based OPC DA server. The Automation wrapper (opcdaauto.dll) has been part of the SIMATIC NET PC software since the earliest releases and is identical across versions; only the underlying SIMATIC NET OPC DA server CLSID changes between major versions.
Decoding the Error
HRESULT Map
| Symptom | Value | Meaning |
|---|---|---|
| HRESULT | 0x800706BA |
RPC_E_SERVER_UNAVAILABLE / Win32 error 1722 — DCOM/RPC endpoint unreachable or COM server cannot be launched remotely |
VB Err.Number
|
462 | "The remote server machine does not exist or is unavailable" — historical mapping of the same RPC failure to the Automation wrapper |
SOPCDAAUTO_ERR |
gpOPC->GetClassDetails ... [hr2=0x80040154] |
REGDB_E_CLASSNOTREG — the local proxy DLL is registered but the class object factory is not retrievable |
SOPCDAAUTO_ERR |
CoCreateInstance ... [hr=0x800706BA] ProgID: 'OPC.SimaticNET' |
CLSID_OPCServer activation against ProgID OPC.SimaticNET failed at the COM runtime |
| Event Viewer | "DCOM was unable to communicate with the computer 'NAME' using any of the configured protocols" | DCOM runtime event 10010 — no protocol in the DCOM protocol sequence successfully contacted the target |
The first SOPCDAAUTO_ERR line is the critical clue: 0x80040154 is raised before the RPC call, while enumerating the class object. It indicates the Automation wrapper DLL is present but not properly registered. The subsequent 0x800706BA is the secondary failure when the wrapper tries to launch the COM server on the remote host.
Other HRESULTs You Will See in This Failure Mode
| HRESULT | Name | Trigger |
|---|---|---|
0x800401F3 |
CO_E_CLASSSTRING |
ProgID string malformed, empty, or not in HKCR — typically a typo |
0x80070005 |
E_ACCESSDENIED |
DCOM launch or access ACL denies the user; not the same as 0x800706BA but often reported in the same scenario |
0x8000401A |
E_NOINTERFACE |
Proxy/stub DLL for the requested interface is not registered on the client |
0x8001011A |
CO_E_PATHTOOLONG |
Server's executable path or working directory exceeds MAX_PATH (260 chars) on the server-side AppID |
Anatomy of the SOPCDAAUTO_ERR File
The trace file is written by the SIMATIC NET OPC Automation wrapper to %TEMP%\SOPCDAAUTO_ERR.log and %TEMP%\SOPCDAAUTO_TRACE.log. Each line is structured as:
00000001 18:33:18,6020 D60 ***TRACEEVENT IS CREATED
00000002 18:33:18,6020 D60 ***TRACE IS INITIALIZED
00000003 18:33:18,6020 D60 -> DLL_PROCESS_ATTACH
00000004 18:33:18,6020 D60 <- DLL_PROCESS_ATTACH
00000005 18:33:26,7530 D60 ERR 'gpOPC->GetClassDetails' OPCAutoServer::GetOPCServers, [hr2=0x80040154]
00000006 18:33:31,7600 D60 ERR 'CoCreateInstance' OPCAutoServer::Connect, [hr=0x800706BA] ProgID: 'OPC.SimaticNET'
00000007 18:56:14,2100 D60 -> DLL_PROCESS_DETACH
The fields are: line number, HH:MM:SS,mmm timestamp, thread ID, severity (ERR or TRC), and the COM call site. The D60 suffix on the thread ID is a decimal-pid reference used by the trace writer. The hr and hr2 are the COM HRESULT and a secondary HRESULT for nested failures. In a healthy trace, the CoCreateInstance call is followed by a QueryInterface for IOPCServer and a successful AddRef; in the failure case, no such lines appear because the activation is rejected at the COM runtime.
Root Cause Analysis
The root cause is a missing COM proxy/stub registration and/or missing OPC Automation wrapper DLL on the client machine. Specifically:
-
GetOPCServerssucceeds because OPC Scout (installed together with SIMATIC NET) callsIOPCServerListagainst the local registry. The remote machine'sCLSIDs are returned over theOPCEnumcustom interface (TCP port 135 plus theOPCEnumendpoint) — no COM launch permission is required for enumeration. -
Connectfails because the client must now perform a remote COM activation. Windows uses the registeredAppIDforOPC.SimaticNETto look up the launch permissions, identity, and security blanket. On the client, two things are required:- The proxy/stub DLL for the
IOPCServerinterface family (opcproxy.dll) must be registered so the marshaled interface can be reconstructed locally. - The OPC Automation wrapper (
OPCDAAuto.dll, the COM in-proc server that implements the friendly Automation classes such asOPCServer,OPCGroup,OPCItems) must be registered on the client.
- The proxy/stub DLL for the
- In the failing case, neither was present: the client had only the .NET Interop assembly built against the type library, not the actual COM server. The Visual Studio project included
Interop.OPCSiemensDAAutomation.dll(the .NET RCW), butOPCDAAuto.dllitself — the COM DLL the RCW activates — was never registered on the client. - The DCOMCNFG
Default Protocolsmatched on both machines because both default toConnection-oriented TCP/IP. The mismatch is not in protocols but in the COM class registration.
Activation Flow Diagram
Resolution: Step-by-Step
Step 1: Install SIMATIC NET PC Software on the Client
The cleanest fix is to install the SIMATIC NET PC software on the OPC client machine using the same version (or a higher compatible version) as the server. This registers:
-
opcdaauto.dll— OPC DA Automation 2.0 wrapper, the COM in-proc server behind the .NET RCW -
opccomn_ps.dll,opcproxy.dll— OPC DA proxy/stub DLLs -
opcenum.exe— the OPCEnum service - The
OPC.SimaticNETProgID and itsAppIDACLs - The SIMATIC NET DCOM configuration entries under
HKCR\AppID\
Procedure:
- Insert the SIMATIC NET DVD or mount the ISO. Launch
Setup.exe. - Choose Custom Installation and select at minimum:
- SIMATIC NET PC Software
- OPC Server (DA)
- OPC Scout (for verification)
- On the User Settings step, configure the same Workgroup or domain account that the server uses for the SIMATIC NET service. Both machines must recognize the same user.
- Complete the installation and reboot.
If the client is on a different domain or a Workgroup with no trust, install the same SIMATIC NET build version that the server uses, but run it as a standalone Workgroup client — the SIMATIC NET setup supports both modes. The supported build matrix is documented in the SIMATIC NET release notes; the typical rule is that the client can be a higher minor version than the server but not a lower minor version (e.g., V14 client to V13 server is supported; V12 client to V14 server is not).
HKCR\CLSID and HKLM\SOFTWARE\Classes. On a 64-bit client, the setup registers both 32-bit and 64-bit versions of OPCDAAuto.dll so that both x86 and x64 .NET applications can resolve the ProgID. Verify after install with reg query "HKCR\OPC.SimaticNET" /s from an elevated command prompt.Step 2: Re-register the Automation DLL (Manual Recovery)
If a full SIMATIC NET install is not feasible, the minimum set of registrations on the client is:
regsvr32 opcdaauto.dll
regsvr32 opccomn_ps.dll
regsvr32 opcproxy.dll
opcenum.exe /regserver
These must be run from an elevated command prompt (Run as administrator) on Vista and later, or from an account with administrator privileges on Windows XP. Verify with:
reg query "HKCR\OPC.SimaticNET" /s
reg query "HKCR\AppID\{AppID_OPC.SimaticNET}" /s
If the ProgID is missing entirely, the SIMATIC NET install package is the supported route — the wrapper DLLs are not redistributable in isolation per the OPC Foundation redistribution policy referenced in the SIMATIC NET PC software release notes.
Step 3: Verify DCOM Configuration
Open dcomcnfg on both machines and apply the OPC Foundation DCOM settings:
| Setting | Server | Client |
|---|---|---|
| Default Authentication Level |
Connect (1) |
Connect (1) |
| Default Impersonation Level |
Identify (2) |
Identify (2) |
| Default Protocols | Connection-oriented TCP/IP | Connection-oriented TCP/IP |
| Enable COM Internet Services on this computer | unchecked | unchecked |
| Enable Distributed COM on this computer | checked | checked |
Then drill into Component Services → Computers → My Computer → DCOM Config, locate the OPC.SimaticNET server, and on the Security tab:
-
Launch and Activation Permissions → add the user that runs the VB client, grant
Local Launch,Remote Launch,Local Activation,Remote Activation. -
Access Permissions → add the same user, grant
Local Access,Remote Access. - Configuration Permissions → leave at default unless the user needs to change settings.
On the Identity tab, select The interactive user if the VB application runs interactively, or This user with a domain/Workgroup service account that has access to the PLC network. For unattended services running under LocalSystem, choose This user with a named account — LocalSystem cannot authenticate to a remote machine across a Workgroup boundary.
On the Endpoints tab, ensure the DCOM protocol list includes Connection-oriented TCP/IP with the appropriate port range. The default is to use a dynamic range; if you need to lock down the firewall (recommended), restrict it as described in Step 5.
dcomcnfg applies to the entire machine and overrides any per-application endpoint configuration. If the server has Default Protocols set to Connection-oriented TCP/IP but a specific application override adds Named Pipes, the activation will succeed only if the client also has Named Pipes in its Default Protocols. The cleanest production setting is to keep the machine-wide default to TCP/IP only and not override per application.Step 4: Configure the Windows Firewall
DCOM uses dynamic TCP ports in addition to port 135 (RPC Endpoint Mapper). For Windows XP, the firewall is Windows Firewall; for later versions, use the advanced firewall (wf.msc).
Open the following inbound rules on both machines:
| Port | Protocol | Purpose |
|---|---|---|
| 135 | TCP | RPC Endpoint Mapper (DCOM activation) |
| 1024-65535 | TCP | DCOM dynamic port range (can be restricted to a specific range via netsh or registry) |
| 102 | TCP | S7 ISO-on-TCP — between SIMATIC NET and the PLC, not between client and server |
To restrict the DCOM port range on Windows XP and Server 2003, set the registry key:
HKLM\SOFTWARE\Microsoft\Rpc\Internet
Ports = REG_MULTI_SZ "5000-5100"
PortsInternetAvailable = REG_SZ "Y"
UseInternetPorts = REG_SZ "Y"
…and add an exception for 5000-5100 TCP in the firewall. On Windows Vista and later, the equivalent is netsh advfirewall and the COM/DCOM predefined rule group. Reference: Microsoft DCOM technical reference.
Step 5: Verify with OPC Scout
Run OPC Scout on the client and connect to the remote OPC.SimaticNET server, then add a test item (e.g., S7:[S7 connection_1]DB1,INT0). If OPC Scout now also fails, the DCOM configuration is still wrong. If it succeeds (as in the source case), the fix is the missing local registration only.
Step 6: Validate the VB Application
Add diagnostic capture to the application so future failures are easier to triage:
Private Sub Button_Connect_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button_Connect.Click
On Error GoTo ErrorHandler
ServerName = ComboBox1_ServerList.Text
Call MyOPCServer.Connect(ServerName)
Button_AddGroup.Enabled = True
Button_Disconnect.Enabled = True
Exit Sub
ErrorHandler:
MsgBox("Error! " & Err.Description & vbCrLf & _
"Source: " & Err.Source & vbCrLf & _
"ErrNr: " & Err.Number & vbCrLf & _
"ErrHelpFile: " & Err.HelpFile & vbCrLf & _
"ErrHelpContext: " & Err.HelpContext)
End Sub
And log the exact ProgID being passed to Connect — a misspelled or case-mismatched ProgID will produce a different HRESULT (0x800401F3 for CO_E_CLASSSTRING) that is easy to confuse with 0x800706BA.
DCOM Configuration Reference
Registry Keys Created by SIMATIC NET Install
| Key | Value | Purpose |
|---|---|---|
HKCR\OPC.SimaticNET\(default) |
OPC.SimaticNET |
ProgID self-reference |
HKCR\OPC.SimaticNET\CLSID |
{...} |
ProgID → CLSID mapping |
HKCR\CLSID\{CLSID}\(default) |
OPC.SimaticNET |
CLSID display name |
HKCR\CLSID\{CLSID}\AppID |
{AppID} |
CLSID → AppID mapping for DCOM config |
HKCR\CLSID\{CLSID}\LocalServer32 |
C:\Program Files\Siemens\Automation\SIMATIC.NET\opcda\s7dpsrv.exe |
Server executable on remote |
HKCR\AppID\{AppID}\AccessPermission |
binary SD | DCOM access ACL |
HKCR\AppID\{AppID}\LaunchPermission |
binary SD | DCOM launch ACL |
HKCR\AppID\{AppID}\AuthenticationLevel |
1 (Connect) |
Per-AppID auth level override |
To audit the current state, run on the client after install:
reg query "HKCR\OPC.SimaticNET" /s
reg query "HKCR\CLSID" /f "SimaticNET" /s
reg query "HKLM\SOFTWARE\Siemens\AUTSW" /s
The HKLM\SOFTWARE\Siemens\AUTSW key is the SIMATIC NET installation registry, which records the installed PC software version, the S7DOS configuration, and the S7 connection names exported by Station Configuration Editor.
Default Authentication and Impersonation Levels Explained
| Level | Value | Behavior | OPC Suitability |
|---|---|---|---|
| Default | 0 | Let the server choose | Indeterminate — avoid |
| None | 1 | No authentication | Not for production |
| Connect | 2 | Authenticate only at connect time | Recommended for OPC DA |
| Call | 3 | Authenticate at the start of each call | Acceptable, higher overhead |
| Packet | 4 | Authenticate every packet | High overhead, rare |
| Packet Integrity | 5 | All packets signed | Reserved for high-security DCOM |
| Packet Privacy | 6 | All packets encrypted | Reserved for high-security DCOM |
The SIMATIC NET OPC DA reference client and most third-party OPC clients use Connect (2) for Authentication and Identify (2) for Impersonation. The Microsoft COM error code reference documents the full set of authentication constants.
Verification Matrix
| Check | Expected Result |
|---|---|
reg query "HKCR\OPC.SimaticNET" on client |
Returns ProgID → CLSID mapping |
GetOPCServers("REMOTE_PC") from VB |
Returns at least OPC.SimaticNET
|
Connect("OPC.SimaticNET") from VB |
Returns; no exception |
MyOPCGroup = MyOPCServer.OPCGroups.Add("Group1") |
Returns valid group object |
MyOPCGroup.OPCItems.AddItem("S7:[S7_1]DB1,INT0", 1) |
Returns valid item; ServerHandle > 0
|
MyOPCGroup.SyncRead(OPCCache, ItemCount, Serverhandles, Values) |
Returns values from PLC |
| Event Viewer System log (client) | No new DCOM 10010 errors |
| Event Viewer System log (server) | One successful activation per client session |
SOPCDAAUTO_ERR file |
No 0x800706BA or 0x80040154 lines |
Why OPC Scout Worked Without the Fix
OPC Scout is a SIMATIC NET component installed on the same image as the OPC server. It uses the same wrapper DLLs that the failing VB application needs but that the client lacked. The VB application did not actually need OPC Scout to be installed on the client — it only needs the OPC Automation wrapper registered. OPC Scout's success on the client was incidental, not a requirement.
This is a common pattern in OPC troubleshooting: the reference client (Scout, Matrikon, Kepware Quick Client) succeeds, but the production client fails, because the reference client is installed in a way that registers more COM components than the production client ships with. Engineers familiar with the works on the reference client symptom often conclude that the network and DCOM are correct, which is true, and then overlook the COM class registration layer.
Migrating to OPC UA
The entire class of DCOM-related failures described here — 0x800706BA, 0x80040154, event 10010, firewall port gymnastics, identity mismatch — disappears when the application is migrated to OPC UA. The SIMATIC NET OPC UA server (component of SIMATIC NET V8.1 and later) speaks the binary OPC UA protocol over TCP port 4840, optionally with certificate-based authentication and AES-256/SHA-256 encryption.
To migrate the VB.NET application:
- Add the OPC Foundation .NET Standard stack (
Opc.Ua.Client) via NuGet, or the legacyOPC Foundation .NET APIfor .NET Framework targets. - Discover the endpoint:
var discovery = new DiscoveryClient(new Uri("opc.tcp://server:4840")); var endpoints = discovery.GetEndpoints(null); - Create a session using the
CertificateandUserIdentityconfigured in SIMATIC NET. - Translate the legacy
ItemID(e.g.,S7:[S7_1]DB1,INT0) to the correspondingNodeId(e.g.,ns=3;s="DB1"."INT0").
The OPC UA route also lifts the platform constraint to any modern Windows, Linux, or container that supports .NET Standard 2.0 or higher — useful when the legacy Windows XP Embedded server is finally retired. The OPC Classic specifications and the OPC UA specification at the OPC Foundation describe the address space mapping.
Common Pitfalls & Edge Cases
| Pitfall | Symptom | Fix |
|---|---|---|
ProgID case mismatch (OPC.Simaticnet vs OPC.SimaticNET) |
0x800401F3 CO_E_CLASSSTRING
|
Use the exact string from GetOPCServers output |
| Mismatched DCOMCNFG Default Authentication between client and server |
0x800706BA or 0x80070005 (access denied) |
Set both to Connect / Identify
|
| DCOMCNFG Enable Distributed COM unchecked on the server | All remote activations fail with 0x800706BA
|
Check on the server |
32-bit/64-bit mismatch between OPCDAAuto.dll and the .NET application |
0x80040154 in 64-bit client |
Register the 64-bit OPCDAAuto.dll or build the app for x86 |
| VB running as a non-interactive service with Identity = The interactive user | Activation succeeds only when a user is logged in | Switch to This user with a service account |
opcenum.exe not running on the server |
GetOPCServers returns empty for remote |
sc config opcenum start= auto and start the service |
SIMATIC NET S7DOS configuration not deployed |
Connect succeeds but AddItem returns E_INVALIDHANDLE
|
Re-export the S7 connection from the server's Station Configuration |
| Multi-homed server with DCOM bound to the wrong NIC | Intermittent 0x800706BA on the wrong subnet |
Restrict DCOM endpoints in DCOMCNFG → Default Protocols → Properties |
| Windows Firewall blocks the dynamic DCOM range | Intermittent success when the port is below 5000, failure above | Open the locked range (e.g., 5000-5100) per Step 4 |
Group Policy overrides dcomcnfg settings on restart |
Works after manual config, fails after reboot | Configure DCOM via Group Policy Preferences or local GPO |
| Workgroup with different local accounts on each machine | Activation fails with 0x80070005 after DCOM works once |
Create matching user/password on both machines, or join a domain |
Diagnostic Tools
| Tool | Use |
|---|---|
DCOM Trace (built-in, enable via dcomcnfg → Default Properties → Enable Distributed COM tracing) |
Captures every CoCreateInstance call to %SystemDrive%\tracing\com\dcom.log with full HRESULT trail |
Sysinternals Process Monitor
|
Filter on opcdaauto.dll / opcproxy.dll and watch for NAME NOT FOUND on the registry path HKCR\OPC.SimaticNET
|
dcomperm (Windows Resource Kit) |
Dump and compare the AppID ACLs on server vs client; useful when the LaunchPermission SD has been overwritten by Group Policy |
SIMATIC NET Trace (start via SIMATIC NET Configuration → Diagnostics) |
Captures the S7DOS and OPC server-side activity; shows S7 connection state, item resolution, and S7 protocol errors |
Wireshark with dcom and ms-rpc dissectors |
Verify port 135 traffic and the activation request; a successful activation shows IUnknown::QueryInterface for IID_IOPCServer inside the ORPC |
| Windows Event Viewer → Applications and Services Logs → Microsoft → Windows → DCOM | Event ID 10010 lists the specific protocol sequence that failed; the message is per-protocol, so the diagnostic narrows to TCP vs Named Pipes vs UDP |
Reference: Siemens Industry Online Support hosts the SIMATIC NET manuals, release notes, and the S7DOS configuration guide. Search for "SIMATIC NET OPC DCOM configuration" for the canonical DCOM setup procedure.
Security & Identity Considerations
Across a Workgroup, DCOM uses the local SAM account database on each machine; there is no Kerberos. The practical implications:
- The account that runs the VB client must exist on the server with the same username and password, or the DCOM activation will fail at the security blanket stage with
0x80070005rather than the0x800706BAseen in the unregistered scenario. - Local
Administratorsgroup membership on the server is sufficient for DCOM launch and activation; OPC read/write authorization is separate and enforced by the SIMATIC NET OPC server based on the SIMATIC NET user rights configured in Station Configuration Editor. - For a domain-joined environment, the domain controller is contacted for SIDs; the same user is resolved transparently on both machines. The error pattern in this article is typical of the Workgroup case, not the domain case.
- If the VB application is later moved to run as a Windows service, the service account must have the SeLogonRight (Allow log on locally) and SeNetworkLogonRight (Access this computer from the network) privileges, and must be granted DCOM launch/activation on the server's
OPC.SimaticNETAppID.
Frequently Asked Questions
What does HRESULT 0x800706BA mean in a Simatic NET OPC connection?
It is the COM-mapped value of Win32 error 1722 (RPC_E_SERVER_UNAVAILABLE). When returned from a CoCreateInstance call on a ProgID such as OPC.SimaticNET, it means the COM runtime could not complete the remote activation — usually because the class is not registered on the client, the AppID launch permission is missing, or the DCOM port is blocked. Inspect the SOPCDAAUTO_ERR log on the client for the actual HRESULT of the underlying CoCreateInstance, which is the layer-correct diagnostic. The Microsoft COM error code reference documents the full HRESULT set.
Why does OPC Scout work but my custom VB OPC client does not?
OPC Scout is a SIMATIC NET component that ships the OPC Automation wrapper (opcdaauto.dll) and proxy/stub DLLs, all registered on install. A custom VB client built with only the .NET Interop assembly activates the COM server from the registry on the client machine; if the wrapper DLL is not registered, CoCreateInstance fails with 0x800706BA. Installing SIMATIC NET (or registering opcdaauto.dll, opcproxy.dll, opccomn_ps.dll, and opcenum.exe /regserver) on the client resolves the asymmetry.
Do I need to install the full SIMATIC NET PC software on the OPC client?
For production-grade installations, yes. The supported path is to install the same SIMATIC NET version (or a higher compatible version) on the client. The minimum runtime for DA-only clients is the OPC Core Components (opcdaauto.dll, opcproxy.dll, opccomn_ps.dll, opcenum.exe), but these are not redistributable as a standalone package and the SIMATIC NET installer is the supported mechanism. See the Siemens Industry Online Support portal for the current SIMATIC NET PC software release notes and the OPC DA component checklist.
What ports must be open between OPC client and SIMATIC NET server?
Open inbound TCP 135 (RPC Endpoint Mapper) on the server. DCOM also uses dynamic TCP ports 1024-65535; restrict the range via the HKLM\SOFTWARE\Microsoft\Rpc\Internet registry key on Windows XP / Server 2003, and via the COM/DCOM rules in Windows Firewall with Advanced Security on Vista and later. The S7 protocol between SIMATIC NET and the PLC uses TCP 102 (ISO-on-TCP) or the configured ISO port — that is between the SIMATIC NET server and the PLC, not between the OPC client and the SIMATIC NET server.
How do I migrate from Simatic NET OPC DA to OPC UA to eliminate DCOM?
SIMATIC NET V8.1 and later ship an OPC UA server on TCP port 4840. Replace the OPC Automation wrapper calls in your client with the OPC Foundation .NET Standard stack (Opc.Ua.Client), discover endpoints with DiscoveryClient, open a session with the configured certificate, and read NodeIds such as ns=3;s="DB1"."INT0". The S7 address format S7:[connection]DBx,BYTEy maps to UA NodeIds documented in the SIMATIC NET OPC UA programming manual. The OPC Foundation provides the .NET reference stack and the address-space specification.