Steeltoe icon indicating copy to clipboard operation
Steeltoe copied to clipboard

Get binding services by Type (SSO or SQL Instances)

Open pnguyen535 opened this issue 3 months ago • 7 comments

Question

In Steeltoe v3, I was able to find service by type from IConfiguration GetSingletonServiceInfo<SsoServiceInfo>() via SsoServiceInfo GetServiceInfos<SqlServerServiceInfo>() via SqlServerServiceInfo GetServiceInfos<SqlServerServiceInfo>().ToList()

How do I do this in V4?

Thank you

Environment (please complete the following information):

  • .NET Version 9
  • Steeltoe Version 4.0.0

Additional context or links

Add any other context about the problem here.

pnguyen535 avatar Sep 07 '25 13:09 pnguyen535

Hi @pnguyen535, thanks for asking.

Can you elaborate a bit on the specific information you're looking for and why you need access to it? Perhaps https://steeltoe.io/docs/v4/welcome/migrate-quick-steps.html#load-vcap_servicesvcap_application-into-optionsmonitor fulfills your needs, but to answer your question, it depends on what you're specifically looking for and how you use that information.

bart-vmware avatar Sep 08 '25 10:09 bart-vmware

If you go to API browser (https://steeltoe.io/api/v3/), search for "SsoServiceInfo" or "SqlServerServiceInfo", you can find the result return. This information is missing from the v4.

Anyway, what I was trying to do is to find services that binded to application in Tanzu Cloud Platform. Services like SSO, SQL Server, ..etc.

In Steeltoe V3, I was able find:

SsoServiceInfo under extension methods:

this.config.GetSingletonServiceInfo<SsoServiceInfo>();

public static IEnumerable<TServiceInfo> GetServiceInfos<TServiceInfo>(this IConfiguration configuration) where TServiceInfo : class => ServiceInfoCreatorFactory.GetServiceInfoCreator(configuration).GetServiceInfos<TServiceInfo>();

Thank you

pnguyen535 avatar Sep 08 '25 13:09 pnguyen535

Thanks for the clarification. These types don't appear in the API Browser for v4, as they have been removed intentionally. To get the list of service bindings on Cloud Foundry / Tanzu Cloud Platform, please use the code that I linked to in the previous comment.

bart-vmware avatar Sep 08 '25 13:09 bart-vmware

@pnguyen535 Were you able to use the suggested alternative? Do you need this issue to remain open?

bart-vmware avatar Sep 19 '25 14:09 bart-vmware

@bart-vmware I've tried it, but still not found an easy way to discovery services. I have applications using SSO and Multiple databases service binding. With v3, I can find a service easy with GetServiceInfos() via config extension. However, with v4 I haven't found an easy solution.

Thank you

pnguyen535 avatar Sep 20 '25 10:09 pnguyen535

Can you please try the steps below using the Steeltoe sample and let me know if it displays the data you're looking for?

  1. Clone the repository at https://github.com/SteeltoeOSS/Samples
  2. Open \Configuration\src\Steeltoe.Samples.Configuration.sln
  3. In Program.cs, add the code below (right after the using directives) to locally simulate running on Cloud Foundry
  4. Run the app, and click on View Configuration from Cloud Foundry
Environment.SetEnvironmentVariable("VCAP_APPLICATION", """
    {
      "cf_api": "https://api.run.pcfone.io",
      "limits": {
        "fds": 16384
      },
      "application_name": "foo",
      "application_uris": [
        "foo-unexpected-serval-iy.apps.pcfone.io"
      ],
      "name": "foo",
      "space_name": "playground",
      "space_id": "f03f2ab0-cf33-416b-999c-fb01c1247753",
      "organization_id": "d7afe5cb-2d42-487b-a415-f47c0665f1ba",
      "organization_name": "some-org",
      "uris": [
        "foo-unexpected-serval-iy.apps.pcfone.io"
      ],
      "users": null,
      "application_id": "f69a6624-7669-43e3-a3c8-34d23a17e3db"
    }
    """);

Environment.SetEnvironmentVariable("VCAP_SERVICES", """
    {
      "csb-azure-postgresql": [
        {
          "binding_guid": "5457fd42-c36f-42e0-afef-eef4a44aa6b7",
          "binding_name": null,
          "credentials": {
            "hostname": "csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc.postgres.database.cloud-hostname.com",
            "jdbcUrl": "jdbc:postgresql://csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc.postgres.database.cloud-hostname.com:5432/vsbdb?user=leJdXEfOyoNsniyO%40csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc.postgres.database.cloud-hostname.com&password=T3Cg.DpMm7TPozIxb~1nEkU6S-mOBIAuuZI_RtEhqoU1IKib.SE~.__7UmsGo.dS&verifyServerCertificate=true&useSSL=true&requireSSL=false&serverTimezone=GMT",
            "name": "vsbdb",
            "password": "T3Cg.DpMm7TPozIxb~1nEkU6S-mOBIAuuZI_RtEhqoU1IKib.SE~.__7UmsGo.dS",
            "port": 5432,
            "status": "created db vsbdb (id: /subscriptions/86fb0197-be70-4ceb-88e3-855615bc1b34/resourceGroups/cotati/providers/Microsoft.DBforPostgreSQL/servers/csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc/databases/vsbdb) on server csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc (id: /subscriptions/86fb0197-be70-4ceb-88e3-855615bc1b34/resourceGroups/cotati/providers/Microsoft.DBforPostgreSQL/servers/csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc) URL: https://portal.cloud-hostname.com/#@b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0/resource/subscriptions/86fb0197-be70-4ceb-88e3-855615bc1b34/resourceGroups/cotati/providers/Microsoft.DBforPostgreSQL/servers/csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc",
            "uri": "postgresql://leJdXEfOyoNsniyO%40csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc.postgres.database.cloud-hostname.com:T3Cg.DpMm7TPozIxb~1nEkU6S-mOBIAuuZI_RtEhqoU1IKib.SE~.__7UmsGo.dS@csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc.postgres.database.cloud-hostname.com:5432/vsbdb",
            "use_tls": true,
            "username": "leJdXEfOyoNsniyO@csb-postgresql-37502b38-167a-4a68-833d-dd2662d7eafc.postgres.database.cloud-hostname.com"
          },
          "instance_guid": "37502b38-167a-4a68-833d-dd2662d7eafc",
          "instance_name": "myPostgreSqlServiceAzureOne",
          "label": "csb-azure-postgresql",
          "name": "myPostgreSqlServiceAzureOne",
          "plan": "small",
          "provider": null,
          "syslog_drain_url": null,
          "tags": [
            "azure",
            "postgresql",
            "postgres",
            "preview"
          ],
          "volume_mounts": []
        },
        {
          "binding_guid": "6a302359-5d5e-400d-bad5-daf9fbd58d49",
          "binding_name": null,
          "credentials": {
            "hostname": "csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952.postgres.database.cloud-hostname.com",
            "jdbcUrl": "jdbc:postgresql://csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952.postgres.database.cloud-hostname.com:5432/vsbdb?user=TAwlYVWerRtnHKWI%40csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952.postgres.database.cloud-hostname.com&password=r7sxQ~1Jcfhl2s8jh7WyXPjzg9Qwec~J47L0VHta.8NSW8JKMM3k88CJ.BZwkx1X&verifyServerCertificate=true&useSSL=true&requireSSL=false&serverTimezone=GMT",
            "name": "vsbdb",
            "password": "r7sxQ~1Jcfhl2s8jh7WyXPjzg9Qwec~J47L0VHta.8NSW8JKMM3k88CJ.BZwkx1X",
            "port": 5432,
            "status": "created db vsbdb (id: /subscriptions/86fb0197-be70-4ceb-88e3-855615bc1b34/resourceGroups/cotati/providers/Microsoft.DBforPostgreSQL/servers/csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952/databases/vsbdb) on server csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952 (id: /subscriptions/86fb0197-be70-4ceb-88e3-855615bc1b34/resourceGroups/cotati/providers/Microsoft.DBforPostgreSQL/servers/csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952) URL: https://portal.cloud-hostname.com/#@b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0/resource/subscriptions/86fb0197-be70-4ceb-88e3-855615bc1b34/resourceGroups/cotati/providers/Microsoft.DBforPostgreSQL/servers/csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952",
            "uri": "postgresql://TAwlYVWerRtnHKWI%40csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952.postgres.database.cloud-hostname.com:r7sxQ~1Jcfhl2s8jh7WyXPjzg9Qwec~J47L0VHta.8NSW8JKMM3k88CJ.BZwkx1X@csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952.postgres.database.cloud-hostname.com:5432/vsbdb",
            "use_tls": true,
            "username": "TAwlYVWerRtnHKWI@csb-postgresql-80597418-b6c4-481a-a3dd-eb3efe296952.postgres.database.cloud-hostname.com"
          },
          "instance_guid": "80597418-b6c4-481a-a3dd-eb3efe296952",
          "instance_name": "myPostgreSqlServiceAzureTwo",
          "label": "csb-azure-postgresql",
          "name": "myPostgreSqlServiceAzureTwo",
          "plan": "small",
          "provider": null,
          "syslog_drain_url": null,
          "tags": [
            "azure",
            "postgresql",
            "postgres",
            "preview"
          ],
          "volume_mounts": []
        }
      ],
      "csb-google-postgres": [
        {
          "binding_guid": "f63060dd-8dcd-4cd8-89a7-52f4d5985fd9",
          "binding_name": null,
          "credentials": {
            "hostname": "10.237.48.17",
            "jdbcUrl": "jdbc:postgresql://10.237.48.17:5432/csb-db?user=HQGEmFKnZtVOTbtC&password=~YZZEwdvF5EobA1j5-ywO9z~D4Lf3UxxrGZ-7L~L-BWn_ltjH03iFp4oqTLLB7Ev&ssl=true",
            "name": "csb-db",
            "password": "~YZZEwdvF5EobA1j5-ywO9z~D4Lf3UxxrGZ-7L~L-BWn_ltjH03iFp4oqTLLB7Ev",
            "port": 5432,
            "require_ssl": true,
            "sslcert": "-----BEGIN CERTIFICATE-----\nMIIDsTCCApmgAwIBAgIEQVzbnDANBgkqhkiG9w0BAQsFADCBiDEtMCsGA1UELhMk\nMDc4MDkwN2QtNTZjMS00ZWYzLWIwM2QtZGRlMTQxYzMyNGI0MTQwMgYDVQQDEytH\nb29nbGUgQ2xvdWQgU1FMIENsaWVudCBDQSAza1ZLbXVZNkNMQktyUkozMRQwEgYD\nVQQKEwtHb29nbGUsIEluYzELMAkGA1UEBhMCVVMwHhcNMjMwMjE0MTYzOTE1WhcN\nMzMwMjExMTY0MDE1WjA+MRkwFwYDVQQDExAza1ZLbXVZNkNMQktyUkozMRQwEgYD\nVQQKEwtHb29nbGUsIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUA\nA4IBDwAwggEKAoIBAQCxLcXEF2rKjLyeyjbAq/nW6RwJJRN25s2d9c0RoKksFoG9\nl8hoXEQWrUtdZrvjkBmKsqQpkCfyAuIaDd2fAZzneGI10UfZt38Q5/2sduQuIQXQ\nwaoxMaAohn9xiI9ObpzZfUhtZRkv2QtNkrWiT9JXOw8qrKziAgYhW2L4u8EAVCs6\nY24D4Qfuo1xG+CFh2kx5RjZN9N7r10zsPqGc+NPvJp6NlSK85MTqG2Lznd/9G+Lv\nSqX/JWzw8QV0flW0cjWP/zSghakpVNdfx9wvWmKsNtdE970jYcTN9pSsetaxUlkn\nJiJU4EoSf/CFFvll5ztjtbdzLf109S84HedmenkjAgMBAAGjbDBqMAkGA1UdEwQC\nMAAwXQYDVR0RBFYwVIFSZG90bmV0LWRldi14LXNlcnZpY2UtYWNjb3VudC0xQGRv\ndG5ldC1kZXZlbG9wZXItZXhwZXJpZW5jZS5pYW0uZ3NlcnZpY2VhY2NvdW50LmNv\nbTANBgkqhkiG9w0BAQsFAAOCAQEAOvzAh7GvLU6N6QkWNNmlDU1UsFqH3c5jOhIs\nE8UqxpNZwaALA5p8Fafl6mkRm2yZQXNs9T0JZyiNg9BsMUBrQiPDLHyR2WCATGth\noVlnExWYJcUHHyFpKYTm6Ytqs/Bs1OxLo7NCOdvkObgnGCz4iVPTrtyxNQVvScBt\npzeVRleivS2vF776tnDWGZx9Tg4GoMEOj7gU5uRJlQkPsGYLmPanss2ZMgW2yOnW\nUM9LwS5+AKKVWRqzvAUL4ovKc8DGZxSpz5KV6QojRWmpRePf9+yE8HOSDH5oWDws\niYuC/fI70WA8NNPrILYmm6IH5DhuUbOKVpoara8/gf0blakpqw==\n-----END CERTIFICATE-----",
            "sslkey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAsS3FxBdqyoy8nso2wKv51ukcCSUTdubNnfXNEaCpLBaBvZfI\naFxEFq1LXWa745AZirKkKZAn8gLiGg3dnwGc53hiNdFH2bd/EOf9rHbkLiEF0MGq\nMTGgKIZ/cYiPTm6c2X1IbWUZL9kLTZK1ok/SVzsPKqys4gIGIVti+LvBAFQrOmNu\nA+EH7qNcRvghYdpMeUY2TfTe69dM7D6hnPjT7yaejZUivOTE6hti853f/Rvi70ql\n/yVs8PEFdH5VtHI1j/80oIWpKVTXX8fcL1pirDbXRPe9I2HEzfaUrHrWsVJZJyYi\nVOBKEn/whRb5Zec7Y7W3cy39dPUvOB3nZnp5IwIDAQABAoIBAD0iUwu/HLz45JhR\no6TFcjZiRqctINM0/huT1YdQjS7GMUwO1DqWI3RDpS58JTZ24SlHTHd+4xmRPxzI\nTgDwWIhRtGlnZchMlU5rDc91UnRMNqp6OFQzEFULW2v8N55TclFk9hmw+YjV9h11\nErEHo8cvfKM344s0MZNO6g5zEjwfOpFWSZd6V5B4mZlF9EVRfQT7lYfhAeHAEdm2\nNOKDfNzAgSHnMv0eOZH4ls3Hc7rg/dNR2nz52H/X/USTDpjOmbP0p6xaHAFwSLk4\nnCn8+a2ukCQfDZDkwAChhQ5aR7uaHu2j8dxjiHK02uprL2/fVuGpYDMeFqbtIwF8\ndLBog9ECgYEA8UQvMVBxcge+9Fz9nVwSvALtkc9XFrsqsWaTQtoYiX/RkZE7TVOl\npr/bP3p8YKhpZw3j7WWNfaEwsN0TsLdVWh3Ijv9bb1trTO9ZwPtwBnzKYMTncfFW\njtfhzGlA63tIZU39120Pd+4n+yf7lMZ4IfcqSQmsTMIQj9JWH4wf6ikCgYEAu/+u\nac5efZBmBLLoSGoy58xA/6gfwpyV+F4UWofG1kp0saqk4ZmkHYR84LtvQUnX9aIq\njXU3MTEFUaFdLpWxoYiIxe2VaIIdjBj+rm+ZCMyZwoj+YFIoXQOddpsyg5HDPG3t\nU9tKUZ/IkmpuOtkSQlxGCR5Gm+QKIS9VNgHOCmsCgYEArx+A6disH8sDjjgZVqlI\nZ/PwIVBQtI0y1gXQikvoV5XRtkmms+AtczX7nL35nedgao8ojF6UL0ZbI2W1LyZD\n69+GflVYNyIyZmutyGg5zluyQj9qh8hXveNxYIBdwQ+BYxcTU9UzzyetGZ7R/BF7\njZvss4sz55tNjjdskAWT/NECgYEAsvuXV5BsEWs6VVrnHppM4LZrY3ry0ds2RIF9\nKzt9KGM2ejeWRlp6DsgmA+cu4p+lBWxgytA/vYuIHtFb35AQz1MntBifWCIYc1sQ\njY4dymzQLo8ybw2I9BUPAu56xxwtHgkiG+X4+YD/+bVuQISNh7RF0USLwLr4keN4\nYrSRLwUCgYAURMaw8BXwBsp8hB8cPWJ5G7K+9eyKImSmLUdKdAhV7g9uEKOk0uYg\nbR1Bjw0NBrcC7/tryf5kzKVdYs3FAHOR3qCFIaVGg97okwhOiMP6e6j0fBENDj8f\n7BzaXnC0iPbhCQwsVrdPHU7rwocyR4oBm+BVyLe6FqCb0+LijCgXYQ==\n-----END RSA PRIVATE KEY-----",
            "sslrootcert": "-----BEGIN CERTIFICATE-----\nMIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAQsFADB3MS0wKwYDVQQuEyRkYjJh\nYjhjMy01M2IwLTQ1OWItOWFlZS1lNGQ0YWM2NzM0NTkxIzAhBgNVBAMTGkdvb2ds\nZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUsIEluYzELMAkG\nA1UEBhMCVVMwHhcNMjMwMjE0MTYxMTI5WhcNMzMwMjExMTYxMjI5WjB3MS0wKwYD\nVQQuEyRkYjJhYjhjMy01M2IwLTQ1OWItOWFlZS1lNGQ0YWM2NzM0NTkxIzAhBgNV\nBAMTGkdvb2dsZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUs\nIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQCA4d9RSpxQLXLF37mNhRpnJmOoEBUuRGjD7A174jzyp20XYn8vY0TggnxhBJvJ\nACk8v4pFK4Unp6+Oi0nOsRLPGzV9MVBYIQFxthPsbtrD0E0rGmNXe5bP+inn4ODP\nui5mcfhGFgCd9h53a8qZciko2rQSSWnDygaHE3cMEfY8R98phKQW6UTDVKl3qlAO\nr2Z88piValBRIAo82Ae3Em8PFGpcHhTFJgayfClPkCaVCBt1gdVtZd+zQwuTY4C9\nhOy95GiXBJqS6SsLCmIZlwmbWiXFbn1Qa7Q1VLbTrNH9v/iXZjGDfjvARn5NBwVO\nYIAdN+IA2DkABIFLqnn6bqvXAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQAw\nDQYJKoZIhvcNAQELBQADggEBAHvvee/erRZwKTIQ3OlzlUD8NW7CwsMkwYHbltng\nbJzcHAdftO9PtHQfwD4j5sKYmwURPIQ5JcMEIJdK68jRLOQmj1Op/Yz7X3Pdo/5U\n1dJ7h2zLwMaIHXujaDOqd4+wg4qQ78MOThxwowZDbNYlek4WdhdkXd3wxz9p7DmY\n4/TCpM5nMUYlvzj+QPDlnJ5DIprHkTpNcC4qRxl0OpHXkesn2xA5wNUAeX3E8EdA\nKon6YwS3p/ahuWH3Sw2uixG2i42TbUiG1aR6v/3sdBg7nwefqbA/iWFsLqxfL3tN\nSL339yG+A7oLjMhwO/PU2xJcNyppN6B3iR0EoNwltM+HFIs=\n-----END CERTIFICATE-----",
            "uri": "postgresql://HQGEmFKnZtVOTbtC:~YZZEwdvF5EobA1j5-ywO9z~D4Lf3UxxrGZ-7L~L-BWn_ltjH03iFp4oqTLLB7Ev@10.237.48.17:5432/csb-db",
            "username": "HQGEmFKnZtVOTbtC"
          },
          "instance_guid": "e466d283-dde3-4220-8ca5-27d458287c3a",
          "instance_name": "myPostgreSqlServiceGoogle",
          "label": "csb-google-postgres",
          "name": "myPostgreSqlServiceGoogle",
          "plan": "default",
          "provider": null,
          "syslog_drain_url": null,
          "tags": [
            "gcp",
            "postgresql",
            "postgres"
          ],
          "volume_mounts": []
        }
      ],
      "p.mysql": [
        {
          "binding_guid": "672a5fe9-9b25-4343-9594-1be5491535ba",
          "binding_name": null,
          "credentials": {
            "hostname": "ff2da938-3706-4511-bf22-03ab0e331629.mysql.service.internal",
            "jdbcUrl": "jdbc:mysql://ff2da938-3706-4511-bf22-03ab0e331629.mysql.service.internal:3306/service_instance_db?user=672a5fe99b25434395941be5491535ba&password=4xs1czjgupzbpnql&useSSL=false",
            "name": "service_instance_db",
            "password": "4xs1czjgupzbpnql",
            "port": 3306,
            "uri": "mysql://672a5fe99b25434395941be5491535ba:4xs1czjgupzbpnql@ff2da938-3706-4511-bf22-03ab0e331629.mysql.service.internal:3306/service_instance_db?reconnect=true",
            "username": "672a5fe99b25434395941be5491535ba"
          },
          "instance_guid": "ff2da938-3706-4511-bf22-03ab0e331629",
          "instance_name": "myMySqlService",
          "label": "p.mysql",
          "name": "myMySqlService",
          "plan": "db-small",
          "provider": null,
          "syslog_drain_url": null,
          "tags": [
            "mysql"
          ],
          "volume_mounts": []
        }
      ]
    }
    """);

This should show something like the following, listing all services and their credentials.

Image

The Steeltoe sample accomplishes this by:

  1. Calling builder.AddCloudFoundryConfiguration() from Program.cs
  2. Injecting IOptions<CloudFoundryServicesOptions> or IOptionsMonitor<CloudFoundryServicesOptions>, which gives access to all the information, which happens in HomeController.cs
  3. Looping over the entries in the return value of the GetAllServices() method call, which happens in CloudFoundry.cshtml

Hope this helps.

bart-vmware avatar Sep 22 '25 10:09 bart-vmware

@pnguyen535 you may also find this section of the MySQL EF Core sample useful, as it shows how to work with multiple instances of the same service type in Steeltoe V4. For the SSO binding, if you're using ASP.NET Core's security libraries it should be a much more native integration than in the past, otherwise there might be a bit of a gap in Steeltoe V4, so we'd need more information on how you need to use the binding in order to best assist.

@bart-vmware's response has a lot of good detail, but it could be overwhelming since it's not quite what you asked for... Backing up a step, we want Steeltoe to be as useful as possible, and if we can understand a little more about how you've been using those service info classes we can better assist. There's also potential for incompatibilities if you're using user-provided services or other credential formats we weren't able to identify, so any info you're willing to provide there would be useful.

If there's any info you are willing to share, but can't in a public forum please feel free to email me.

TimHess avatar Sep 24 '25 20:09 TimHess

Hi @TimHess,

I have been using SteeltoeOSS for a long time. I love functionalities its provided. One of the functionality that very useful to me is the ability to query services (RabbitMq, Databases). My application binding to multiple database, the V3 gave me the ability to get all the database services and determine to route requests to appropriate db. However, to upgrade to V4, I have to rewrite how the Service Discovery package work to find the Services that I needed. That is one of reason that I have been holding up to upgrade to v4.

Thank you

pnguyen535 avatar Dec 16 '25 17:12 pnguyen535

@pnguyen535 It's to be expected that migrating to a newer major version requires code changes. But without providing the specific information that you need, this is unactionable for us. It would help if you'd share the code that consumes the ServiceInfo, so we understand what information you need. All the info is already available from IOptionsMonitor, so it's unclear what's blocking you.

bart-vmware avatar Dec 17 '25 11:12 bart-vmware