opcua: Failing to connect to server

Hello!

I am trying to evaluate this library, I started by trying the python client, which connects without much hassle. I was just trying out the samples found here: https://github.com/FreeOpcUa/python-opcua/blob/master/examples/client-minimal.py

I cannot however get this client to connect to the same server I am trying against. I am using this code:

fn main() {
    let mut client = ClientBuilder::new()
        .application_name("TestClient")
        .application_uri("urn:TestClient")
        .create_sample_keypair(false)
        .trust_server_certs(true)
        .session_retry_limit(3)
        .client()
        .unwrap();

    println!("Clientbuilder");

    // Create an endpoint. The EndpointDescription can be made from a tuple consisting of
    // the endpoint url, security policy, message security mode and user token policy.
    let endpoint: EndpointDescription = (
        format!("{}:{}", OPC_IP, OPC_PORT).as_str(),
        "None",
        MessageSecurityMode::None,
        UserTokenPolicy::anonymous(),
    )
        .into();

    println!("Endpoint");

    // Create the session
    match client.connect_to_endpoint(endpoint, IdentityToken::Anonymous) {
        Ok(session) => {
            println!("Connected");

            // Create a subscription and monitored items
            if subscribe_to_values(session.clone()).is_ok() {
                let _ = Session::run(session);
            } else {
                println!("Error creating subscription");
            }
        }
        Err(e) => {
            println!("{:?}", e);
        }
    }

    println!("exit");
}

But I keep getting this error:

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/krille/.cargo/registry/src/github.com-1ecc6299db9ec823/opcua-client-0.7.0/src/message_queue.rs:49:27
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

About this issue

  • Original URL
  • State: open
  • Created 4 years ago
  • Comments: 16 (13 by maintainers)

Most upvoted comments

@milgner It’s a B&R Automation server, not sure about the version.

use opcua_client::prelude::*;

#[tokio::main]
async fn main() {
    std::env::set_var("RUST_LOG", "info");
    env_logger::init();

    let mut client = ClientBuilder::new()
        .application_name("test")
        .application_uri("urn:test")
        .create_sample_keypair(true)
        .verify_server_certs(false)
        .trust_server_certs(true)
        .session_retry_limit(3)
        .client()
        .unwrap();

    let endpoint: EndpointDescription = (
        "opc.tcp://10.20.22.9:4840/",
        SecurityPolicy::None.to_str(),
        MessageSecurityMode::None,
        UserTokenPolicy::anonymous(),
    )
        .into();

    let session = client
        .connect_to_endpoint(endpoint, IdentityToken::Anonymous)
        .unwrap();

    Session::run(session);
}

WARN 2021-10-27T11:19:53Z: opcua_client::config: Endpoint config contains no endpoints
INFO 2021-10-27T11:19:53Z: opcua_client::session::session: Connect
INFO 2021-10-27T11:19:53Z: opcua_client::session::session: Security policy = None
INFO 2021-10-27T11:19:53Z: opcua_client::session::session: Security mode = None
INFO 2021-10-27T11:19:53Z: opcua_client::session::session_state: Making secure channel request
INFO 2021-10-27T11:19:53Z: opcua_client::session::session_state: security_mode = None
INFO 2021-10-27T11:19:53Z: opcua_client::session::session_state: security_policy = None
INFO 2021-10-27T11:19:53Z: opcua_client::session::session: Connect was successful
INFO 2021-10-27T11:19:53Z: opcua_client::session::session_state: Making secure channel request
INFO 2021-10-27T11:19:53Z: opcua_client::session::session_state: security_mode = None
INFO 2021-10-27T11:19:53Z: opcua_client::session::session_state: security_policy = None
INFO 2021-10-27T11:19:53Z: opcua_client::comms::tcp_transport: WriteState has dropped
INFO 2021-10-27T11:19:54Z: opcua_client::session::session: Session has dropped
INFO 2021-10-27T11:19:54Z: opcua_client::comms::tcp_transport: TcpTransport has dropped
INFO 2021-10-27T11:19:54Z: opcua_client::session::session_state: SessionState has dropped
INFO 2021-10-27T11:19:54Z: opcua_client::comms::tcp_transport: ReadState has dropped
thread 'main' panicked at 'Cannot drop a runtime in a context where blocking is not allowed. This happens when a runtime is dropped from within an asynchronous context.', /home/jsn/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.8.3/src/runtime/blocking/shutdown.rs:51:21
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Hmm … As I am writing this, I just discovered that if I run the code without a #[tokio::main] context, it works.

fn main() {
...
}

Well, the output still looks suspicious, but it doesn’t crash anymore.

WARN 2021-10-27T12:00:56Z: opcua_client::config: Endpoint config contains no endpoints
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session: Connect
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session: Security policy = None
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session: Security mode = None
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session_state: Making secure channel request
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session_state: security_mode = None
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session_state: security_policy = None
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session: Connect was successful
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session_state: Making secure channel request
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session_state: security_mode = None
 INFO 2021-10-27T12:00:56Z: opcua_client::session::session_state: security_policy = None
 INFO 2021-10-27T12:00:57Z: opcua_client::comms::tcp_transport: WriteState has dropped
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session: Session has dropped
 INFO 2021-10-27T12:00:57Z: opcua_client::comms::tcp_transport: TcpTransport has dropped
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: SessionState has dropped
 INFO 2021-10-27T12:00:57Z: opcua_client::comms::tcp_transport: ReadState has dropped
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session: Connect
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session: Security policy = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session: Security mode = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: Making secure channel request
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: security_mode = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: security_policy = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session: Connect was successful
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: Making secure channel request
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: security_mode = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: security_policy = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: Making secure channel request
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: security_mode = None
 INFO 2021-10-27T12:00:57Z: opcua_client::session::session_state: security_policy = None