Queue Provisioning issue

Hi

I am having difficulty provisioning a queue from a C# client application. The Solace Broker is running within a Docker container and the client application is running on the Docker host machine. This error is always thrown:

“Endpoint provisioning not allowed or not supported on session”

My understanding is that this happens because the Client Username that I am using to create a session with is based upon a client profile that does not have permission to create endpoints. I have checked this and it seems that the client profile does have the necessary permission so I am unclear as to why this error still occurs.

My client connects and the connection can be seen on the PubSub site. The Client Username that I am using to create a session with and connect is called ‘EnableAllClient’. This username is based upon a client profile called ‘EnableAll’.

The ‘EnableAll’ client profile has all settings set to true (including the ‘Allow client to create endpoints’ setting).

I used the following command to create the Docker container that is being used for Solace:

docker run -d -p 8080:8080 -p 55555:55555 -p:8008:8008 -p:1883:1883 -p:8000:8000 -p:5672:5672 -p:9000:9000 -p:2222:2222 --shm-size=2g --env username_admin_globalaccesslevel=admin --env username_admin_password=admin --name=solace solace/solace-pubsub-standard

Could you please advise me as to what I am doing wrong?
Thank you
Dan

Hi Dan,
Are you using the Solace .NET SDK? What are the connection details specified to connect to the broker?

When the client connects to PubSub+, you can verify the client-username on PubSub+ Manager under the client connection properties tab.

You can see in the screenshot that my test client tried to authenticate with ‘test’ client-username, but is connected on ‘default’ - this is because ‘test’ client-username does not exist. As this is not the expected client-username, it might have different client-profile settings associated with it which may not allow you to create an endpoint.

Another place to check is the protocol specified for your hostname/IP in your application; either TCP, or nothing which defaults to TCP (eg. “tcp://localhost”, “tcps://localhost” or “localhost”). If anything else is specified as the protocol (for example, http(s)), you could be seeing the “Endpoint provisioning not allowed or not supported on session” error.

Hello Dan, Can you provide some more info?

  • What protocol/API are you using from C# Application to connect? (JMS/MQTT/…)?
  • If using SMF based protocols (like JMS,JCSMP), can you confirm you are connecting to the right VPN ?
  • Can you also confirm you are using the right username and password from your C# application ?
  • You can also check the broker logs by dropping to the container shell (Default Configuration for Software Event Brokers) and viewing (or tailing) /usr/sw/jail/logs/event.log

Hi
Thanks for the replies. I am using the nuget package ‘SolaceSystems.Solclient.Messaging (10.9.0)’. The connection details used to connect to the broker are:

Secure Web Messaging Host: ws://localhost:8008
VPNName: default

I have not listed the values of the username and password here but I can confirm I am setting them correctly.
On PubSub+ Manager, I can see the client-username under the client connection properties tab. The value is ‘EnableAllClient’ which is what I would expect. The authenticated client-username is also ‘EnableAllClient’.

I have looked in event.log but cannot see anything regarding an endpoint provisioning not being allowed.

Maybe the issue relates to the choice of protocol for the host. I will experiment with that.

Thank you
Dan

Hi,

Turns out it was the choice of protocol. Connecting using ‘tcp://locahost:55555’ allowed the queue to provision correctly.

Thank you for guiding me in the right direction, much appreciated.

Dan

Sorry, that should have read

‘tcp://localhost:55555’

Are you saying that you’re using the C# .NET Solace API, and all you did was change the port from 8008 (websockets) to 55555 (standard SMF) and it just worked?? No other changes?

Hi Aaron,

Yes thats right. I literally changed from ws to tcp (including a change in port) using the C# .NET Solace API, and then it started working. I don’t know why it didn’t work previously.

Thanks

Dan

Hi Dan,
Upon further investigation, it is possible to use a WebSockets connection and do guaranteed messaging. To do this, you would need to enable the session property ‘guaranteed delivery with web transport’ in your application (.NET API version 10.9.0 or above is required).
sessionProps.GdWithWebTransport = true

Thanks for investigating this.