ASP.NET WebAPI2项目中ELMAH无法连接MongoDB的求助
解决ELMAH MongoDB版访问时「连接被拒绝(127.0.0.1:27017)」的问题
这个错误本质就是ELMAH连不上本地的MongoDB服务,我给你梳理几个一步步排查的方向,应该能解决:
1. 先确认MongoDB服务真的在运行
别光想当然,先实打实验证:
- 按Win+R输入
services.msc打开服务面板,找到MongoDB服务,看看状态是不是「正在运行」,没启动的话右键点击启动它 - 或者打开CMD,输入
mongosh "mongodb://127.0.0.1:27017",如果能进入MongoDB的交互界面,说明服务是正常的;连不上的话,那就是MongoDB本身没启动或者端口被占用
2. 检查web.config里的ELMAH配置是否正确
很多时候是连接字符串写错了:
- 先看连接字符串节点,正确格式应该是这样的:
<connectionStrings> <add name="elmah-mongo" connectionString="mongodb://127.0.0.1:27017/elmah_logs" /> </connectionStrings>
这里的elmah_logs是ELMAH要存日志的数据库名,哪怕这个库不存在MongoDB也会自动创建,但格式不能错
- 如果你的MongoDB设置了用户名密码,连接字符串要改成:
mongodb://你的用户名:你的密码@127.0.0.1:27017/elmah_logs?authSource=admin - 再检查ELMAH的配置节,是不是引用了正确的连接字符串名:
<elmah> <errorLog type="Elmah.MongoErrorLog, Elmah.Mongo" connectionStringName="elmah-mongo" /> </elmah>
这里的connectionStringName必须和上面的连接字符串name完全一致
3. 核对MongoDB驱动和ELMAH.Mongo的版本兼容性
ELMAH.Mongo对MongoDB的C#驱动版本有要求,版本不匹配会出各种奇怪问题:
- 打开NuGet包管理器,看看
Elmah.Mongo和MongoDB.Driver的版本,比如有些旧版ELMAH.Mongo只支持2.x的驱动,你装了3.x就会出问题 - 要么把MongoDB.Driver降级到ELMAH.Mongo支持的版本,要么换个最新版的Elmah.Mongo(如果有更新的话)
4. 排查防火墙/安全软件的拦截
本地防火墙或者杀毒软件可能会把ELMAH访问27017端口的请求给拦了:
- 先暂时关掉防火墙和杀毒软件,试试能不能打开
/elmah.axd - 如果关掉就正常了,记得在防火墙里加个规则,允许MongoDB服务或者27017端口的入站出站请求
5. 检查EF MongoDB的配置是否冲突
你项目里用了EF+MongoDB,说不定EF的配置影响了ELMAH的连接:
- 尽量把EF和ELMAH的连接字符串分开配置,不要共用一个,避免互相干扰
- 看看EF的初始化代码有没有占用连接池,导致ELMAH拿不到连接
要是上面都试过还不行,你可以在Global.asax里加一段测试代码,直接测MongoDB连接,能更精准找问题:
protected void Application_Start() { // 手动测试MongoDB连接 var mongoClient = new MongoClient("mongodb://127.0.0.1:27017"); try { // 尝试获取数据库和插入一条测试数据 var testDb = mongoClient.GetDatabase("test_db"); var testCol = testDb.GetCollection<BsonDocument>("test_col"); testCol.InsertOne(new BsonDocument("key", "value")); // 能走到这里说明连接完全没问题,问题在ELMAH的配置上 } catch (Exception ex) { // 这里的异常信息会告诉你具体为啥连不上 System.Diagnostics.Debug.WriteLine(ex.Message); } }
内容的提问来源于stack exchange,提问作者Mocolicious
相关产品推荐
相关产品推荐

