2015-07-09 24 views
0

Я подключился к локальному KepServerEX, и теперь я пытаюсь подключиться к удаленному KepServerEX с помощью C#.Не удается подключиться к удаленному KepServer с помощью OPCAutomation.dll

У меня настроен DCOM для моего компьютера для подключения к удаленному серверу, но, к сожалению, я до сих пор не могу подключиться к удаленному KepServerEx.

Я использовал эту команду:

KepServer.Connect("KEPware.KEPServerEx.V4", remoteServerIP) 

и настроен DCOM для моего компьютера.

Это мой код:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    OPCServer KepServer; 
    OPCGroups KepGroups; 
    OPCGroup KepGroup; 
    OPCItems KepItems; 
    OPCItem KepItem; 
    string strHostIP = ""; 
    string strHostName = ""; 
    bool opc_connected = false; 
    int itmHandleClient = 0; 
    int itmHandleServer = 0; 

    private void GetLocalServer() 
    { 

     IPHostEntry IPHost = Dns.Resolve(Environment.MachineName); 
     if (IPHost.AddressList.Length > 0) 
     { 
      strHostIP = IPHost.AddressList[0].ToString(); 
     } 
     else 
     { 
      return; 
     } 
     IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP); 
     strHostName = ipHostEntry.HostName.ToString(); 

     try 
     { 

      KepServer = new OPCServer(); 
      object serverList = KepServer.GetOPCServers(strHostName); 
      foreach (string turn in (Array)serverList) 
      { 
       bool bl = turn.Contains("KEPware"); 
       if (bl == true) 
        cmbServerName.Items.Add(turn); 
      } 
      cmbServerName.SelectedIndex = 0; 
      btnConnLocalServer.Enabled = true; 

     } 
     catch (Exception) 
     { 
     } 

    } 

    private bool CreateGroup() 
    { 
     try 
     { 
      KepGroups = KepServer.OPCGroups; 
      KepGroup = KepGroups.Add("OPCDOTNETGROUP"); 
      SetGroupProperty(); 
      KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange); 
      KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete); 
      KepItems = KepGroup.OPCItems; 

     } 
     catch (Exception) 
     { 
      return false; 

     } 
     return true; 
    } 

    private void SetGroupProperty() 
    { 
     KepServer.OPCGroups.DefaultGroupIsActive = true; 
     KepServer.OPCGroups.DefaultGroupDeadband = 0; 
     KepGroup.UpdateRate = 1000; 
     KepGroup.IsActive = true; 
     KepGroup.IsSubscribed = true; 
    } 

    private void GetServerInfo() 
    { 
     tsslServerStartTime.Text = "Start time:" + KepServer.StartTime.ToString() + "  "; 
     tsslversion.Text = "version:" + KepServer.MajorVersion.ToString() + "." + KepServer.MinorVersion.ToString() + "." + KepServer.BuildNumber.ToString(); 
    } 

    private bool ConnectRemoteServer(string remoteServerIP, string remoteServerName) 
    { 
     try 
     { 
      KepServer.Connect(remoteServerName, remoteServerIP); 
      if (KepServer.ServerState == (int)OPCServerState.OPCRunning) 
      { 
       tsslServerState.Text = "Is connected to the -" + KepServer.ServerName + " "; 
      } 
      else 
      { 
       tsslServerState.Text = "State: " + KepServer.ServerState.ToString() + "  "; 

      } 

     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     GetLocalServer(); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (!opc_connected) 
     { 
      return; 
     } 

     if (KepGroup != null) 
     { 
      KepGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange); 
     } 

     if (KepServer != null) 
     { 
      KepServer.Disconnect(); 
      KepServer = null; 
     } 

     opc_connected = false; 

    } 

    private void btnSetGroupPro_Click(object sender, EventArgs e) 
    { 
     SetGroupProperty(); 

    } 

    private void btnConnLocalServer_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!ConnectRemoteServer(txtRemoteServerIP.Text, "KEPware.KEPServerEx.V4")) 
      { 
       return; 
      } 

      btnSetGroupPro.Enabled = true; 
      opc_connected = true; 

      GetServerInfo(); 

      RecurBrowse(KepServer.CreateBrowser()); 

      if (!CreateGroup()) 
      { 
       return; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("" + ex); 
     } 
    } 
} 
+0

У вас есть ошибка? Оставьте только код, относящийся к вашей проблеме, чтобы облегчить людям помощь вам (методы, в которых вы фактически создаете соединение. – Dzyann

+0

У меня не получилось ошибки или чего-то еще. Это метод, который я использовал для подключения к удаленному серверу : KepServer.Connect (remoteServerName, remoteServerIP); – AJHope

+0

В вашем методе ConnectRemoteServer у вас есть попытка, catch, если есть исключение, оно возвращает false. Вызывается ли эта строка? Если это не вызвано тем, что у вас есть KepServer.ServerState после вызова KepServer.Connect (remoteServerName, remoteServerIP); – Dzyann

ответ

1

Наконец я решил мою проблему. Я очень рад поделиться с вами своей проблемой.

Во-первых, вы используете метод KepServer.Connect(remoteServerName, remoteServerIP); для подключения к удаленному серверу.

Вам необходимо настроить DCOM для вашего компьютера клиента и сервера. Вы можете обратиться к ссылке: http://support.sas.com/rnd/itech/doc9/admin_oma/sasserver/comdcom/xpsp2.html.

Важно, что вам необходимо создать локального пользователя на моем клиентском компьютере с тем же именем пользователя и паролем, что и на сервере.

Вы можете обратиться к ссылке: http://www.elmajdal.net/win7/how_to_create_a_password_for_a_user_account_in_windows_7.aspx, чтобы создать имя пользователя.

Надеюсь, это может вам помочь.

Смежные вопросы