如何通过代理连接到Azure服务总线主题- C#?

p3rjfoxz  于 2023-08-07  发布在  C#
关注(0)|答案(2)|浏览(112)

我正在开发一个Web应用程序,当我们提供命名空间连接字符串和主题名称时,该应用程序将显示Azure服务总线主题详细信息。下面是我使用的代码:

//To Check whether the topic is available in Azure Service Bus
private bool IsTopicAvailable(string connectionString, string path)
        {
            try
            {
                var servicebusConnectionString = new ServiceBusConnectionStringBuilder(connectionString)
                {
                    TransportType = Microsoft.ServiceBus.Messaging.TransportType.Amqp
                };
                NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(servicebusConnectionString.ToString());
                if (namespaceManager.TopicExists(path))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }

//To Get the Topic details
    public TopicDescription GetTopic(string connectionString, string topicName)
        {
            var servicebusConnectionString = new ServiceBusConnectionStringBuilder(connectionString)
            {
                TransportType = Microsoft.ServiceBus.Messaging.TransportType.Amqp
            };
            NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(servicebusConnectionString.ToString());
            var topic = namespaceManager.GetTopic(topicName);
            return topic;
        }

字符串
为此,我使用了Microsoft.ServiceBus Assembly。但是当我通过代理使用应用程序时,我无法获得主题的详细信息,而只能在if (namespaceManager.TopicExists(path))行获得The remote server returned an error: (407) Proxy Authentication Required异常。但是我已经指定了一个出站规则来允许从chrome建立连接。在其他一些资源中,我看到解决方案是将代理详细信息设置为WebRequest.DefaultWebProxy,例如:

var proxy = new WebProxy(data.ProxyUri);
proxy.Credentials = new NetworkCredential(data.ProxyUsername, data.ProxyPassword);
WebRequest.DefaultWebProxy = proxy;


但是这种方法覆盖了整个应用程序中使用的默认代理,并且在其他领域也得到了反映。但是我想只对服务总线主题调用应用代理值。
有人可以帮助我使用C#为Azure服务总线代理配置代理吗?

mrfwxfqh

mrfwxfqh1#

错误代码407表示代理已被使用。只是有代理身份验证问题。它基本上可以使用系统代理设置,比你创建的没有旁路列表等更好。
要继续使用现有代理,您可以尝试以下操作:WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(data.ProxyUsername,data.ProxyPassword);
谢啦,谢啦

oyt4ldly

oyt4ldly2#

若要启用代理连接,必须使用Web套接字。如果没有Web套接字,则指定代理不是有效的选项。MS Article的数据。
让代理工作的主要部分是:

var proxy = new WebProxy("http://proxy.com:8080", true);
proxy.Credentials = new NetworkCredential("username", "password"); //if auth is required (407)

var options = new ServiceBusClientOptions();
        options.WebProxy = proxy;
        options.TransportType = ServiceBusTransportType.AmqpWebSockets; //enable WebSockets

var client = new ServiceBusClient(connectionString, options);

字符串

相关问题