无法建立连接,因为目标计算机主动拒绝它127.0.0.1:63591

时间:2018-02-01 22:25:36

标签: c# wcf iis asp.net-web-api iis-7

我已经在这方面工作了几天而且已经筋疲力尽了。我在整个stackoverflow中搜索过,但我尝试过的所有东西都不起作用。

我在本地计算机上运行它并使用SQL Management Studio 2016作为我的SQL数据库。

我尝试解决此问题的方法是:

  • 关闭所有防火墙设置。 image title
  • 打开网络上的端口。 image title
  • 检查代码是否正确。 image title
  • 使用netstat -ab检查端口,它显示我运行的端口在SqlServer下的0.0.0.0:63591上,但不在127.0.0.1(Localhost)下。 image title
  • 我已经去了IIS并启用了目录浏览。 image title
  • 我创建了一个名为Food.aspx的默认文档(在帖子中阅读以尝试它)并且它不起作用。 image title
  • 我尝试将身份更改为本地管理员用户帐户但所有权限 据说密码无效。

image title

  • 我检查了每个链接,并尝试了我能找到的所有选项。最后,它给了我一个500错误,这意味着服务器错误。看着堆栈跟踪,这是下面的错误。 image title
  • 我试图telnet它并且不起作用 image title

如果你能帮助我,那就太棒了

1 个答案:

答案 0 :(得分:0)

您确定您的数据库实例正在运行吗?在SQL Server的配置管理器中检查它,以及默认端口。

enter image description here enter image description here

之后,与您的网络配置的连接字符串中的端口号进行比较。

<connectionStrings>
<clear/>
<add name="xxxxx" connectionString="metadata=res://*/xxxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\xxxxxx;Initial Catalog=xx;Persist Security Info=True;User ID=yyy;Password=yyyy;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/></connectionStrings>

因此,在调试代码后,我发现了解决方案中存在的问题。

1 - **此问题的第一个原因是**“为属性检测到自引用循环”,因为您正在尝试使用public IQueryable GetFoods()直接序列化Entity Framework对象。由于Food有MealFood而且MealFood有参考食物,它不能序列化。

解决方案是在您的Global.asax中添加此代码GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

你的方法将是这样的:

protected void Application_Start(){ GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; }

这里我们需要为JSON.Net序列化程序定义全局设置以忽略循环引用。

2 - **第二个问题是**“实体或复杂类型'模型'不能在LINQ to Entities查询中构建”

要解决此问题,您可以像这样创建食物类的伪类 之一:

public class PseudoFood
{
public int FoodID { get; set; }
public string FoodName { get; set; }
public int Calories { get; set; }
public string Notes { get; set; }
}

之后可以使用此方法查询您的数据库。

public IQueryable<PseudoFood> GetFoods()
{    
      return (from a in db.Foods
                    orderby a.FoodName descending
                    select new PseudoFood()
                    {
                        FoodName = a.FoodName,
                        FoodID = a.FoodID,
                        Calories = a.Calories,
                        Notes = a.Notes
                    }
             ).AsQueryable();    
}

返回PseudoFood“IQueryable”并最终检索您的记录。

enter image description here