You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure网站/WebJob连接Solace服务器端口55555异常求助

解决Azure WebApp/WebJob连接Solace服务器卡住的问题

这问题我之前帮团队排查过类似的,Azure Web Apps/WebJobs的网络环境确实和本地IIS/控制台有不少差异,结合你已经做的排查,给你几个针对性的方向试试:

1. 确认Azure环境的出站网络权限

虽然平台团队排除了防火墙问题,但Azure Web App的沙盒环境对非标准端口(比如55555)的出站访问有隐性限制,尤其是未启用VNet集成的情况下。建议:

  • 尝试将Solace服务器的监听端口切换为标准端口(如443,如果支持TLS连接的话)
  • 配置Azure WebApp的VNet集成,让应用直接通过内网VPN通道访问Solace服务器,绕过公共网络的端口限制

2. 排查libsolclient.dll的依赖缺失

你已经把dll放在bin目录,但Azure的运行环境默认缺少Solace客户端依赖的VC++运行库。可以:

  • 把Visual C++ Redistributable对应的dll(如vcruntime140.dll、msvcp140.dll)打包到应用的bin目录一起部署
  • 在Azure门户的配置 > 通用设置中开启“启用32位应用程序”(如果你的libsolclient是32位版本),避免64位环境下的依赖加载失败

3. 添加连接超时与重试配置

你的代码未设置连接超时,Azure网络延迟可能导致Connect()无限等待。修改SessionProperties补充以下配置:

SessionProperties sessionProps = new SessionProperties() {
    // 原有配置...
    ConnectTimeoutInMsecs = 10000, // 设置10秒连接超时,超时会抛出错误
    ReconnectRetries = 5,          // 调高重试次数
    ReconnectRetryWaitInMsecs = 2000 // 每次重试间隔2秒
};

4. 强制生成Solace详细日志

你提到LogDelegate无法配合log4net,改用Solace自带的文件日志更容易排查问题,设置日志路径为Azure的默认日志目录:

ContextFactoryProperties cfp = new ContextFactoryProperties() {
    SolClientLogLevel = SolLogLevel.Debug,
    LogFilePath = @"D:\home\LogFiles\solace.log" // Azure WebApp的日志存储目录
};

部署后可以在Azure门户的日志流或Kudu控制台查看这个日志文件,能看到连接过程中的详细报错信息。

备选方案:改用Solace AMQP客户端

如果以上方法都无效,可以试试Solace的AMQP协议客户端,AMQP使用标准端口5672/5671,Azure环境对标准协议的兼容性更好,不容易出现连接卡住的情况。

修改后的完整代码示例

#region Initialize properties
ContextProperties contextProps = new ContextProperties() { TimerResolutionInMsecs = 5000 };
SessionProperties sessionProps = new SessionProperties() {
    Host = ConfigurationManager.AppSettings["Host"],
    VPNName = ConfigurationManager.AppSettings["VPNName"],
    UserName = ConfigurationManager.AppSettings["UserName"],
    Password = ConfigurationManager.AppSettings["Password"],
    ReconnectRetries = 5,
    ReconnectRetryWaitInMsecs = 2000,
    ConnectTimeoutInMsecs = 10000
};
#endregion

ContextFactoryProperties cfp = new ContextFactoryProperties() {
    SolClientLogLevel = SolLogLevel.Debug,
    LogFilePath = @"D:\home\LogFiles\solace.log"
};

logger.Info("Going to create ContextFactory instance");
ContextFactory.Instance.Init(cfp);
logger.Info("SolaceTestQueuePublish initializing...");

#region Create the Context
context = ContextFactory.Instance.CreateContext(contextProps, null);
{
    #region Create and connect the Session
    session = context.CreateSession(sessionProps, SolTest_OnMessage, SolTest_OnSessionEvent);
    {
        logger.Info("Solace Session Created.");
        try {
            logger.Info("Trying to connect to Solace now..");
            ReturnCode returnCode = session.Connect();
            if (ReturnCode.SOLCLIENT_OK == returnCode) {
                isSolaceConnected = true;
                logger.Info("Connected to Solace.Success!");
            } else {
                logger.Info($"Failed to connect Solace! Error Code: {returnCode.ToString()}");
            }
        } catch (Exception ex) {
            logger.Info($"Failed to connect Solace!Error: {ex.Message}; Stack: {ex.StackTrace}");
        }
    }
}
#endregion

内容的提问来源于stack exchange,提问作者Arnab Sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:45:28