Asp.net IIS中承载的Web应用程序无法从同一服务器连接到MongoDB
mongodb正在服务器中运行,我将服务器的ip(不是本地主机)作为绑定ip放在mongo配置文件中。 我的web api位于asp.net core中,执行示例中的数据库调用,如下所示(我没有在代码段中放入真正的ip,但与127.0.0.1不同):Asp.net IIS中承载的Web应用程序无法从同一服务器连接到MongoDB,asp.net,mongodb,iis,database-connection,web-deployment,Asp.net,Mongodb,Iis,Database Connection,Web Deployment,mongodb正在服务器中运行,我将服务器的ip(不是本地主机)作为绑定ip放在mongo配置文件中。 我的web api位于asp.net core中,执行示例中的数据库调用,如下所示(我没有在代码段中放入真正的ip,但与127.0.0.1不同): const string MONGO\u URL=”mongodb://xx.xxx.x.xxx:27017"; MongoClientSettings=MongoClientSettings.FromUrl(新的MongoUrl(MONGO_UR
const string MONGO\u URL=”mongodb://xx.xxx.x.xxx:27017";
MongoClientSettings=MongoClientSettings.FromUrl(新的MongoUrl(MONGO_URL));
[路线(“”)
[HttpGet]
公共HttpResponseMessageGetAll()
{
var客户端=新的MongoClient(设置);
var userName=User.Identity.Name;
var filter=Builders.filter.Eq(“用户名”,用户名);
var database=client.GetDatabase(“myDatabase”);
var collection=database.GetCollection(“myEntity”);
var queryResult=collection.Find(过滤器);
if(queryResult.CountDocuments()!=0)
return Request.CreateResponse(HttpStatusCode.OK,queryResult.First());
其他的
返回Request.CreateResponse(HttpStatusCode.NoContent);
}
当我在本地运行项目(使用vpn连接)时,mongo db连接成功。但是当与IIS部署在同一服务器上时,web api不会“看到”数据库。要找到根本原因,需要挖掘异常。首先,请检查您的事件查看器。如果从.net核心运行时引发任何异常,您将找到它。如果在事件查看器中找不到异常。这可能是第一次机会的例外。然后,您需要使用debug diagnostic collection收集转储文件,并使用WINDBG分析转储文件。要找到根本原因,您需要挖掘异常。首先,请检查您的事件查看器。如果从.net核心运行时引发任何异常,您将找到它。如果在事件查看器中找不到异常。这可能是第一次机会的例外。然后,您需要使用debug diagnostic collection收集转储文件,并使用WINDBG分析转储文件。
const string MONGO_URL = "mongodb://xx.xxx.x.xxx:27017";
MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(MONGO_URL));
[Route("")]
[HttpGet]
public HttpResponseMessage GetAll()
{
var client = new MongoClient(settings);
var userName = User.Identity.Name;
var filter = Builders<MongoCartDto>.Filter.Eq("Username", userName);
var database = client.GetDatabase("myDatabase");
var collection = database.GetCollection<myDto>("myEntity");
var queryResult = collection.Find(filter);
if (queryResult.CountDocuments() != 0)
return Request.CreateResponse(HttpStatusCode.OK, queryResult.First());
else
return Request.CreateResponse(HttpStatusCode.NoContent);
}