我有大量由企業系統調用的C#WCF服務。當我們在開發過程中遇到問題時,可能需要很長時間才能在我們的開發機器上重現確切的條件。實質上,我們需要使用WCF &記錄請求,並根據記錄的數據構建集成測試。如果請求中的對象很大,則可能需要相當長的時間。使用反射來重新創建測試對象
我希望能夠打開記錄/調試模式,以便請求中的所有對象都被序列化爲C#代碼。請參閱WriteCSharpToCreateObject方法。然後,我可以將日誌中的代碼直接複製到新的c#測試中。這是我的第一個努力 - 對於非常簡單的對象來說哪種工作方式。 (xml serilization確實有效)是否有可用的實用程序/庫可用?有沒有更好的辦法?
private static void LogRequestParms(params object[] list)
{
foreach (var o in list)
{
SerializeObjectAndWriteToFile(o);
string cSharpCode = WriteCSharpToCreateObject(o);
}
}
private static string WriteCSharpToCreateObject(object o)
{
StringBuilder b = new StringBuilder();
Type myType = o.GetType();
b.AppendLine(myType.Name + " o = new " + myType.Name + "();");
PropertyInfo[] myFields = myType.GetProperties();
foreach (var v in myFields)
{
b.AppendLine("o." + v.Name + " = " + v.GetValue(o, null).ToString() + ";");
}
return b.ToString();
}
private static void SerializeObjectAndWriteToFile(object request)
{
using (System.IO.Stream s = new System.IO.FileStream("C:\\temp\\logRequest.log", System.IO.FileMode.Append))
{
System.Xml.Serialization.XmlSerializer objectSerilizer = new System.Xml.Serialization.XmlSerializer(request.GetType());
objectSerilizer.Serialize(s, request);
}
}
這不就是迷你垃圾箱的設計目的嗎? – Ian 2010-03-02 15:52:20