Подпишитесь на событие data_changed сервера OPC из службы Windows

Я хочу прочитать значение элемента с сервера opc, подписавшись на событие OpcGroup_DataChanged. Я могу сделать это через клиент формы Windows. Но когда я пытаюсь сделать то же самое из службы Windows, событие не срабатывает. Может ли какое-то тело пролить свет? Ниже моя реализация:

    OPCItemResult[] rslt;
        rtc = OpcGrp.AddItems(iDefs, out rslt);
        if (HRESULTS.Failed(rtc))
            return rtc;

        ItemHandles = new int[rslt.Length];
        errors = new int[iDefs.Length];
        for (int i = 0; i < iDefs.Length; ++i)
        {
            ItemHandles[i] = rslt[i].HandleServer;
            errors[i] = rslt[i].Error;
        }


        // data changed callback handler
        OpcGrp.DataChanged += new DataChangeEventHandler(OpcGrp_DataChanged);
        OpcGrp.AdviseIOPCDataCallback();
        this.EventLog.WriteEntry("No of items: "+rtc.ToString(), EventLogEntryType.Information);

Событие:

    protected void OpcGrp_DataChanged(object sender, DataChangeEventArgs e)
    {
        this.EventLog.WriteEntry("Data changed at server", EventLogEntryType.Information);

        string txt = "";
        foreach (OPCItemState rslt in e.sts)
        {
            txt += rslt.DataValue.ToString() + "\r\n";
        }
        this.EventLog.WriteEntry(txt, EventLogEntryType.Information);
    }

person gee'K'iran    schedule 02.07.2014    source источник


Ответы (1)


Вероятно, это проблема с разрешениями DCOM. Чтобы убедиться в этом, попробуйте запустить клиентскую службу в той же учетной записи, в которой вы запускаете приложение Windows Forms (возможно, в вашей учетной записи для входа). Если это сработает, вам нужно будет настроить свой OPC-сервер (или значения по умолчанию для DCOM), чтобы позволить серверу взаимодействовать с любой учетной записью, в которой вы хотите, чтобы ваш клиент работал.

person Ken    schedule 02.07.2014
comment
Привет Кен, спасибо за ответ. Даже если это так, я должен увидеть ошибку в журнале приложений, по крайней мере, не так ли? - person gee'K'iran; 02.07.2014
comment
Сервер OPC должен будет где-нибудь зарегистрировать эту ошибку. Иначе вы бы ничего не увидели. - person Ken; 02.07.2014