最近,我的生产环境遇到了一个奇怪的行为,我无法理解它背后的原因或原因。我在本地环境中实现了完全相同的代码,并且可以正常调试它而没有任何问题。它很少发生在我的生产环境中。
在进一步调试我的生产环境后,我发现问题出在string format
.
所以我用值构建一个字符串取自web.config
var HereIsTheProblem = string.Format("client_id={0}&username={1}&password={2}",
TakenFromConfig("abc"),
TakenFromConfig("bcd"),
TakenFromConfig("cde"));
当我尝试打印这个HereIsTheProblem
变量时,它甚至不会打印任何东西,就像每次代码遇到这个变量时,它都会跳过它并且什么也不做。
为了检查问题不是由配置引起的,我从配置中取值,并string.Format
立即将其放入
var HereIsTheProblem = string.Format("client_id={0}&username={1}&password={2}",
"abcderfg-1231kasd-1231sad-znasda",
"username",
"password");
它仍然遇到相同的行为。进一步调试后,我注意到问题在于第一个带有破折号的值。只要它有1个或更多破折号,就会遇到上述问题,但是当我删除破折号时,不会发生此问题。
进一步解释这是多么奇怪,是这种问题在一段时间内突然发生(没有我们部署或更新我们的代码),并且没有我们修复它,它会在一段时间后自行恢复
有人知道这段代码背后发生了什么吗?
编辑:此代码用于 ASP.NET 并放入 IIS
EDIT2:这就是我将变量打印到日志文件中的方式。这就是我打印它的方式。
FileStream fs = File.Open(strFileName, FileMode.Append, FileAccess.Write,
FileShare.ReadWrite);
StreamWriter myWriter = new StreamWriter(fs);
myWriter.WriteLine(WriteAnyLogHere);
此变量还用作要通过 发送的请求正文httpWebRequest
。然后HttpWebResponse
就没有对象就回来了
编辑 3:这是我使用HereIsTheProblem
变量的实际代码。日志记录仅用于调试它
string URL = "URL";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
httpWebRequest.Timeout = 300000;
httpWebRequest.Accept = "text/html";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string HereIsTheProblem = "From Above Description";
streamWriter.Write(HereIsTheProblem);
streamWriter.Flush();
}
try
{
using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
}
}
catch (WebException ex)
{
using (var httpResponse = (HttpWebResponse)ex.Response)
{
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
}
}