Zeige Ergebnis 1 bis 9 von 9

Thema: Exception beim Einfügen von Addressbucheintrag via C#

  1. #1
    STARFACE Newbie
    Registriert seit
    22.08.2018
    Beiträge
    3

    Standard Exception beim Einfügen von Addressbucheintrag via C#

    Hallo!

    Wir versuchen unser Exchange-Addressbuch automatisch mit dem von Starface abzugleichen. Dazu schien uns die aktuelle C# Integrations-API via .NET Remoting gut geeignet (siehe Demo-Projekt von Wolfang in Entwicklung c# .net).

    Die Demo-Anwendung funktioniert auch prima, aber nun wollte ich mit folgendem Code mal einen Testeintrag im Addressbuch anlegen:
    Jetzt habe ich zum Test mal folgenden Codeschnipsel ausgeführt:

    Code:
    m_uccAddressBookRequests = new UccAddressbookRequestsClient(m_binding, tcpEndpointAddress);
    
    // Neuen Kontakt unter einer Addressbuch-Registerkarte anlegen
    {
        UccAddressbookTag[] tags = m_uccAddressBookRequests.GetTags(string.Empty);
        // tags[*].Alias == Registerkartenname, z.B. "Firmenkunden"
        // tags[*].Name == Internet Pfad, z.B. "folder/1"
        // tags[*].ID == UUID der Registerkarte
        var eineGueltigeTagId = "c81e728d-9d4c-3f63-af06-7f89cc14862c";
    
        string contactId = Guid.NewGuid().ToString();
    
        // CreateContact()-Methode erzeugt neues Objekt, traegt aber noch nicht ein
        // Hier kann man dann wohl noch weitere Felder ergaenzen
        UccAddressbookEntry entry = m_uccAddressBookRequests.CreateContact(
            contactId,
            "TestHannes",
            "TestMeier",
            "+49 6451 123456",
            searchForExistingContact: false,
            tagId: eineGueltigeTagId,
            languageId: string.Empty
        );
    
        // Neuen Addressbucheintrag hinzufuegen
        m_uccAddressBookRequests.PutContactDetails(entry, createNewContact: true);
    }
    Dabei schleudert der UCC Client aber eine NullReferenceException zurück, scheinbar bei dem Versuch, das Addressbuch-Tag zu deserialisieren:

    Code:
    NullReferenceException
       bei ReadUccAddressbookAttributeFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[] )
       bei System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
       bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract)
       bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 id, RuntimeTypeHandle declaredTypeHandle, String name, String ns)
       bei ReadArrayOfUccAddressbookAttributeFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString , XmlDictionaryString , CollectionDataContract )
    Ich habe schon einige Variationen durchprobiert (z.B. default-UccAddressBookTag benutzen, null übergeben, Array der Größe 0 übergeben), ohne Erfolg.

    Könnte es sein dass die UccWrapper.dll (ich verwende Version 6.4.3.159 aus dem gelinkten Thread) nicht mehr mit dem aktuellen UCC Softphone kompatibel ist? Oder evtl. noch ein Problem (ich glaube die UccAddressBookTags sind erst kürzlich eingebaut worden)?

  2. #2
    STARFACE Expert
    Benutzerbild von nucom
    Registriert seit
    11.12.2012
    Ort
    9443 Widnau
    Beiträge
    1.375

    Standard

    Hallo MeWald

    Könnte es sein dass die UccWrapper.dll (ich verwende Version 6.4.3.159 aus dem gelinkten Thread) nicht mehr mit dem aktuellen UCC Softphone kompatibel ist? Oder evtl. noch ein Problem (ich glaube die UccAddressBookTags sind erst kürzlich eingebaut worden)?
    Der STARFACE UCC-Client kommt immer mit seiner entsprechend Kompatiblen UccWrapper.dll

    Sofern der UCC-Client Standardinstallationspfad verwendet wurde befindet sich diese im: "C:\Program Files\STARFACE\UC Client\UccWrapper.dll"

    MfG

    Fabian
    Modulhersteller aus der Schweiz
    __________________________________________________ ________
    STARFACE Excellence Partner: Info | Certified Module Creator Kontakt

  3. #3
    STARFACE Newbie
    Registriert seit
    22.08.2018
    Beiträge
    3

    Standard

    Danke, gut zu wissen. Ich habe mein Experiment nochmal mit der in meinem Programmverzeichnis liegenden UccWrapper.dll (6.5.0.284) wiederholt.

    Die NullReferenceException tritt auch damit auf. Also liegt es schonmal nicht an abweichenden Versionen:

    Code:
    System.NullReferenceException
       bei ReadUccAddressbookAttributeFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[] )
       bei System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
       bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract)
       bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 id, RuntimeTypeHandle declaredTypeHandle, String name, String ns)
       bei ReadArrayOfUccAddressbookAttributeFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString , XmlDictionaryString , CollectionDataContract )
       bei System.Runtime.Serialization.CollectionDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
       bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract)
       bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 id, RuntimeTypeHandle declaredTypeHandle, String name, String ns)

  4. #4
    STARFACE Newbie
    Registriert seit
    08.05.2019
    Beiträge
    3

    Standard

    Hallo zusammen, ich bekomme den gleichen Fehler in der aktuellen Version 6.6.

    Selbst wenn ich einen vorhandenen Kontakt öffne, bearbeite und speichern möchte...

    Need help, Danke :-)

    Gruß Joe

  5. #5
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    980

    Standard

    Hallo Joe,

    seit einiger Zeit blockiert Windows 10 den UCC Client, wenn er ein WCF TCP Binding öffnen möchte. Ich habe für die 6.6.0.219 deshalb als Fallback wieder das Named Pipe Binding aktiviert. Du solltest auf jeden Fall den 6.6.0.219 Client und die darin enthaltene UCC Wrapper Dll verwenden.

    Ansonsten müssest Du mal den Code zeigen, damit ich das reproduzieren kann.


    Gruß Wolfgang

  6. #6
    STARFACE Newbie
    Registriert seit
    08.05.2019
    Beiträge
    3

    Standard

    Hi Wolfgang,

    Danke für die Info...

    Ich habe es jetzt geschafft, eine Adresse zu öffnen und sie zu speichern. Aber das anlegen funktioniert noch nicht... Hier mal der wesentliche Code:

    Code:
    private void Form1_Load(object sender, EventArgs e)
            {
                if (m_watcher == null)
                return;
    
                if (m_watcher.IsUccClientRunning)
                {
                    OnUccClientRunningStateChanged(true, m_watcher.TcpEndpointAddress, m_watcher.NamedPipeEndpointAddress);
                }
    
                m_watcher.UccClientRunningStateChanged += OnUccClientRunningStateChanged;
    
                dataGridViewCalls.DataSource = m_activeCalls;
                dataGridViewCalls.MultiSelect = false;
                dataGridViewCalls.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
                // Get Addresses...
                UccAddressbookRequestsClient addr = new UccAddressbookRequestsClient(m_bindingPipe, m_watcher.NamedPipeEndpointAddress);
                UccAddressbookAttribute[] attributes = null;
                UccAddressbookEntrySummary[] entries = null;
    
                addr.GetSummaryTable(out attributes, out entries, "", "", -1, 100000, "", true);
    
                UccAddressbookEntry address = addr.CreateContact(System.Guid.NewGuid().ToString(), "Joe-Test", "Seidel-Test", "+49 179 00000000", true, System.Guid.NewGuid().ToString(), string.Empty); 
                //address = addr.GetContactDetails("6230ffb2-61cf-4538-9853-02ded86c8891");
                addr.PutContactDetails(address, true);
    Dann die Verbindung:
    Code:
    private void OnUccClientRunningStateChanged(bool isRunning, System.ServiceModel.EndpointAddress tcpEndpointAddress, System.ServiceModel.EndpointAddress namedPipeEndpointAddress)
    
            {
                if (isRunning)
                {
                    ConnectToUccClient(namedPipeEndpointAddress);
                }
                else
                {
                    DisconnectFromUccClient();
                    BeginInvoke(new Action(ClearBlfs));           
                }
            }
    
            private void ConnectToUccClient(System.ServiceModel.EndpointAddress tcpEndpointAddress)
            {
                try
                {
                    m_ctx = new InstanceContext(this);
    
                    m_bindingPipe = new NetNamedPipeBinding()
                    {
                        Security = 
                            {
                                Mode = NetNamedPipeSecurityMode.Transport 
                            }
                    };
    
                    m_uccServerConnection = new UccServerConnectionClient(m_ctx, m_bindingPipe, tcpEndpointAddress);
                    m_uccFunctionKeyRequests = new UccFunctionKeyRequestsClient(m_bindingPipe, tcpEndpointAddress);
                    m_uccSoftPhoneClient = new UccSoftPhoneClient(m_bindingPipe, tcpEndpointAddress);
                    m_callRequestsClient = new UccCallRequestsClient(m_bindingPipe, tcpEndpointAddress);
    
                    m_uccServerConnection.RegisterCallback((int)UccEventTypeFilter.UccFunctionKeyEvents | (int)UccEventTypeFilter.UccCallEvents);
    
                    var functionKeys = m_uccFunctionKeyRequests.GetFunctionKeys();
    
                    OnUccFunctionKeysChanged(functionKeys);
    
                }
                catch (Exception)
                {
                // ignored
                }
    Vlt. kannst Du ja sehen, wo der Fehler liegt...

    Danke & Gruß Joe
    Geändert von joe.seidel (09.05.2019 um 15:19 Uhr)

  7. #7
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    980

    Standard

    Hallo Joe,

    ja, ich konnte das Problem reproduzieren. Für den Client selbst fiel es nicht auf, da dieser die WCF Schnittstelle nicht verwendet. Outlookconnector und Fax benutzen die WCF-Schnittstelle.

    Ich habe Dir als Private Nachricht einen Link für eine Hotfix-Version gesendet. Damit ist das Problem aus meiner Sicht behoben. Du kannst dann so was schreiben:

    Code:
                var tags = m_addressbookRequests.GetTags("");
                if (tags == null) return;
    
                m_addressbookTags.Clear();
                comboBoxFolders.Items?.Clear();
    
                foreach (var uccAddressbookTag in tags)
                {
                   m_addressbookTags.Add(uccAddressbookTag);
                   comboBoxFolders.Items.Add(uccAddressbookTag.Alias);
                }
    und dann

    Code:
          private void buttonCreateContact_Click(object sender, EventArgs e)
          {
             try
             {
                var tagIndex = comboBoxFolders.SelectedIndex;
                var tagId = string.Empty;
    
                if ( (tagIndex >= 0) && (tagIndex < m_addressbookTags.Count) )
                {
                   var tag = m_addressbookTags[tagIndex];
                   tagId = tag?.ID ?? string.Empty;
                }
    
                var contact = m_addressbookRequests.CreateContact(string.Empty, textBoxFirstName.Text, textBoxLastName.Text,
                   textBoxPhoneNumber.Text, true, tagId, string.Empty);
    
                m_addressbookRequests.PutContactDetails(contact, true);
                MessageBox.Show("Done");
             }
             catch (Exception ex)
             {
                MessageBox.Show(ex.Message);
             }
          }

    Gruß Wolfgang

  8. #8
    STARFACE Newbie
    Registriert seit
    08.05.2019
    Beiträge
    3

    Standard

    Hallo Wolfgang,

    vielen Dank für Deine Hilfe... Nach Installation lief alles super.

    Vielen Dank für die schnelle Antwortzeit.

    Gruß Joe

  9. #9
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    980

    Standard

    Hallo Joe,

    vielen Dank für die Tests und die schnelle Rückmeldung!

    Der Bugfix ist dann auch in der kommenden Version 6.7 enthalten.


    Gruß Wolfgang

Ähnliche Themen

  1. TIFF an stelle von PDF beim Fax
    Von ITC-B im Forum STARFACE Einrichtung & Administration
    Antworten: 5
    Letzter Beitrag: 25.06.2015, 15:42
  2. Antworten: 8
    Letzter Beitrag: 15.02.2015, 18:44
  3. Fehler beim Update von 5.1.0.10 auf 5.3.0.0
    Von Nico88Nico im Forum STARFACE Installation
    Antworten: 12
    Letzter Beitrag: 28.01.2013, 22:51
  4. Beim abheben Gespräch weg
    Von slu im Forum STARFACE Einrichtung & Administration
    Antworten: 7
    Letzter Beitrag: 26.10.2010, 12:37
  5. Eigene Beiträge anzeigen und [Gelöst] einfügen
    Von slu im Forum Off-Topic & Smalltalk
    Antworten: 2
    Letzter Beitrag: 05.05.2010, 14:23

Stichworte

Lesezeichen

Forumregeln

  • Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
  • Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
  • Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
  • Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
  •