我们的系统中存在最奇怪的问题,其中" 1"被改为" / 0"。我们的应用是基于服务。 Wcf Web服务。我们呼吁服务A来获取一些数据。该服务调用服务B,服务B抓取数据并返回它。服务A只是将其映射到新对象并将其返回给初始调用者。我可以直接呼叫服务B并且数据很好,但是通过服务A,如果某个字符串字段是" 1"它回来了" \ 0"。这个星期四随机开始。代码肯定没有更新,没有人认为有任何更新到服务器这些都运行。
这里来自服务A的代码。当变量prog的CType为" 1"此方法返回的ProgramDTO包含一个" \ 0" 的CType public ProgramDTO GetCProgram(string clId, int cType)
{
try
{
using (var clientChannel = (IClientChannel)cSpecsFactory.CreateChannel())
{
var client = (ICSpecs)clientChannel;
var prog = client.GetCProgram(clId, cType);
return ToDomainModel(prog);
}
}
catch (Exception ex)
{
logger.Error("Error getting programs.", ex);
return null;
}
}
private ProgramDTO ToDomainModel(CProgramDTO c)
{
try
{
return new ProgramDTO
{
CType = c.CType,
ClID = c.ClId,
IsET = c.IsET,
PreviewImage = c.Image,
CId = c.CId,
};
}
catch (Exception ex)
{
logger.Error(string.Format("Error converting to domain model."), ex);
return null;
}
}
public class ProgramDTO
{
[DataMember]
public string ClID { get; set; }
[DataMember]
public string CType { get; set; }
[DataMember]
public bool IsET { get; set; }
[DataMember]
public byte[] PreviewImage { get; set; }
[DataMember]
public long CId { get; set; }
}
我能想到的唯一不同的是,当服务B获取这些数据时,它是一个int,我们将其转换为字符串。
CType = cProgram.CType.ToString(CultureInfo.InvariantCulture)
我们在其他任何地方都没有使用CultureInfo.InvariantCulture,但没有别的(至少6,50和51没问题)有问题,当它从这些服务返回时它仍然看起来没问题。