深度优先

这个家伙好懒,除了文章什么都没留下

0%

这个问题困惑了好久,在自己电脑是数据库连接都可以用(VS2017),

但是在公司的电脑(VS2015)上死活报:The underlying provider failed on open这个错误。

网上查找了很多资料都没有得到解决,之前一直怀疑是VS版本的问题。

今天有尝试了下发现:

连接地址用的域名在VS2015下会报错,在VS2017下能正常使用。

改成IP地址就好了

1
<add name="tscsimplecrmdbEntities" connectionString="metadata=res://*/TSCSimpleCRMTool.csdl|res://*/TSCSimpleCRMTool.ssdl|res://*/TSCSimpleCRMTool.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=120.79.188.***;port=3306;user id=****;password=****;persistsecurityinfo=true;database=tscsimplecrmdb&quot;" providerName="System.Data.EntityClient" />

简直坑….

网上的一些解决方案,在我这里不适用:

https://blog.csdn.net/yyueshen/article/details/41012389

https://blog.csdn.net/Xcrow/article/details/48180711

使用log4net可以很方便地为应用添加日志功能。应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能。同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息。

一、安装log4net.dll

二、建错误日志表

我用的MySql数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 Date: 2018-04-01 14:01:45
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `errorlog`
-- ----------------------------
DROP TABLE IF EXISTS `errorlog`;
CREATE TABLE `errorlog` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`DATE` datetime DEFAULT NULL,
`Thread` varchar(255) DEFAULT NULL,
`LEVEL` varchar(50) DEFAULT NULL,
`Logger` varchar(255) DEFAULT NULL,
`Message` varchar(4000) DEFAULT NULL,
`Exception` varchar(8000) DEFAULT NULL,
`System` varchar(200) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=366 DEFAULT CHARSET=utf8;

三、添加配置文件

新建log4net.config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
 <?xml version="1.0" encoding="utf-8" ?>
<log4net debug="false">
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<!--https://www.cnblogs.com/shenbing/p/6210438.html-->
<bufferSize value="1" />
<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<connectionString value="server=120.****.53;user id=root;password=*****;persistsecurityinfo=True;database=***" providerName="MySql.Data.MySqlClient" />
<commandText value="INSERT INTO errorlog (`Date`,`Thread`,`Level`,`Logger`,`Message`,`Exception`,`System`) VALUES(@log_date, @thread, @log_level, @logger, @message, @exception, @system)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="8000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
<parameter>
<parameterName value="@system" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{system}" />
</layout>
</parameter>
</appender>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="Log/AT.log"/>
<param name="datePattern" value="YY-MM-dd HH:mm"/>
<param name="AppendToFile" value="true"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log4net\BP"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="_yyyyMMdd'.log'"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>

<!--设置根目录,添加appenders并设置默认日志等级 -->
<root>
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<level value="FINE"/>
<appender-ref ref="ADONetAppender" />
<appender-ref ref="RollingLogFileAppender"/>
</root>

<!-- 为特定的目录指定等级 -->
<logger name="iNotes">
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<level value="FINE"/>
<appender-ref ref="ADONetAppender"/>
<appender-ref ref="RollingLogFileAppender"/>
</logger>

<logger name="StellaLogger">
<level value="ALL"/>
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="RollingLogFileAppender"/>
</logger>
</log4net>

四、Global.asax配置

1、在Global.asax全局配置里面添加 GlobalConfiguration.Configuration.Filters.Add(new WebApiExceptionFilterAttribute()); 这一句,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 using log4net.Config;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using WebAPI.App_Start;

namespace WebAPI
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{

AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

//全局异常处理
GlobalConfiguration.Configuration.Filters.Add(new WebApiExceptionFilterAttribute());
//配置log4
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/log4net.config")));
}
}
}

2、在WebApiConfig.cs文件的Register方法里面添加 config.Filters.Add(new WebApiExceptionFilterAttribute()); 这一句,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void Register(HttpConfiguration config)
{
//跨域配置
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

// Web API 路由
config.MapHttpAttributeRoutes();

RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new SessionControllerRouteHandler();

config.Filters.Add(new WebApiExceptionFilterAttribute());
}

五、WebApiExceptionFilterAttribute类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http.Filters;

namespace WebAPI.App_Start
{
public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute
{
//重写基类的异常处理方法
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
//1.log4net记录异常日志
var logger = LogManager.GetLogger(typeof(WebApiExceptionFilterAttribute));
logger.Error("ErrorMessage", actionExecutedContext.Exception);

//2.返回调用方具体的异常信息
if (actionExecutedContext.Exception is NotImplementedException)
{
actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
else if (actionExecutedContext.Exception is TimeoutException)
{
actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.RequestTimeout);
}
//.....这里可以根据项目需要返回到客户端特定的状态码。如果找不到相应的异常,统一返回服务端错误500
else
{
actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
var oResponse = new HttpResponseMessage(HttpStatusCode.NotImplemented);
oResponse.Content = new StringContent("方法不被支持");
oResponse.ReasonPhrase = "This Func is Not Supported";
actionExecutedContext.Response = oResponse;
}
base.OnException(actionExecutedContext);
}
}
}

详细请参考:

https://www.cnblogs.com/shenbing/p/6210438.html

https://www.cnblogs.com/landeanfen/p/5363846.html

转自:https://blog.csdn.net/zzstack/article/details/52790455

目前看到的方法有:

(1)使用http://localhost.fiddler 代替http://localhost

(2)使用用 http://localhost. 在locahost后面加一个点号

(3)使用 http://127.0.0.1. 在127.0.0.1后面加一个点号

(4)使用 http://machinename 使用机器名

(5)打开Fiddler,菜单>Fiddler Options>General>Enable IPv6(if avaible)去掉该选项。

(6)在hosts文件中加入127.0.0.1 localsite这样也可以被捕获到。

参考文献:

(1)http://stackoverflow.com/questions/4647105/how-to-configure-fiddler-to-listen-to-localhost

(2)http://blog.chinaunix.net/uid-20675015-id-1899931.html

(3)http://www.cnblogs.com/amylis_chen/p/3985404.html