Detect all opc server and then filter opc da server from detected server.
connecting opc da server.
          this.logger("Connect to OPC DA Server");
        var allServersList = new OpcCom.ServerEnumerator();
        var spec = Specification.COM_DA_20;
        var connectionData = new ConnectData(new System.Net.NetworkCredential
        {
            UserName = this.username,
            Password = this.password
        });
        this.logger("Get all detected OPC Servers");
        var servers = allServersList.GetAvailableServers(spec, string.IsNullOrEmpty(host) ? null : this.host, connectionData);
        if (servers == null)
        {
            this.logger("No OPC Servers detected");
            return false;
        }
        this.logger("Detected servers");
        foreach (var s in servers)
        {
            this.logger(string.IsNullOrEmpty(s.Name) ? string.Empty : s.Name + ", HostName : " + (string.IsNullOrEmpty(s.Url.HostName) ? string.Empty : s.Url.HostName) + ", Path : " + (string.IsNullOrEmpty(s.Url.Path) ? string.Empty : s.Url.Path) + ", Scheme : " + (string.IsNullOrEmpty(s.Url.Scheme) ? string.Empty : s.Url.Scheme) + ", Port : " + (string.IsNullOrEmpty(s.Url.Port.ToString()) ? string.Empty : s.Url.Port.ToString()));
        }
        this.logger("Filtering OPC DA servers from detected OPC servers");
        var oPCDAServers = servers?.Where(s => s.Url.Scheme.ToLower() == "opcda").ToList();
        if (!oPCDAServers.Any())
        {
            this.logger("No OPC DA Servers detected");
            return false;
        }
        this.logger("Detected OPC DA Servers");
        foreach (var s in oPCDAServers)
        {
            this.logger(string.IsNullOrEmpty(s.Name) ? string.Empty : s.Name + ", HostName : " + (string.IsNullOrEmpty(s.Url.HostName) ? string.Empty : s.Url.HostName) + ", Path : " + (string.IsNullOrEmpty(s.Url.Path) ? string.Empty : s.Url.Path) + ", Scheme : " + (string.IsNullOrEmpty(s.Url.Scheme) ? string.Empty : s.Url.Scheme) + ", Port : " + (string.IsNullOrEmpty(s.Url.Port.ToString()) ? string.Empty : s.Url.Port.ToString()));
        }
        this.logger("Matching " + this.oPCDAServerName + " OPC DA Server from detected OPC DA servers");
        oPCDAServer = oPCDAServers?.Where(o => o.Name.ToLower() == this.oPCDAServerName.ToLower()).FirstOrDefault();
        if (oPCDAServer == null)
        {
            this.logger(this.oPCDAServerName + " OPC DA Server not matched");
            return false;
        }
        this.logger(this.oPCDAServerName + " OPC DA Server matched");
        this.logger("Connecting OPC DA Server" + this.oPCDAServerName);
        **oPCDAServer.Connect();**
        if (!oPCDAServer.IsConnected)
        {
            this.logger(this.oPCDAServerName + " OPC DA Server connection failed.");
            return false;
        }
        this.logger("Successfully connected to " + oPCDAServer.Name + "OPC DA Server");
on connecting OPC server getting following error
Error during reading from OPC DA server 10...250.OPCDAServerName
 at Opc.Server.Connect(URL url, ConnectData connectData)
 at Opc.Da.Server.Connect(URL url, ConnectData connectData)
 at Opc.Server.Connect()
 at OPCDAConnector.ConnectServer()
 iner exceptionSystem.Runtime.InteropServices.ExternalException (0x80004005): CoCreateInstanceEx: ?¼?´???°
 at OpcCom.Interop.CreateInstance(Guid clsid, String hostName, NetworkCredential credential)
 at OpcCom.Factory.Connect(URL url, ConnectData connectData)
 E_NETWORK_ERROR Could not connect to server.
 OPC Server and OPC client is on same machine.
how to resolve this issue?
User contributions licensed under CC BY-SA 3.0