Hi,
I'm using TFS client API (no server permissions).
I wrote some code to search in item revisions.
When searching database using this code, a lot of times I got exception, probably for the linq part in code.
I cannot debug/understand/bypass it.
Could you help please?
Thanks
Yar
Background: Code uses 3 filtering levels:
1. Simple TFS query.
2. LINQ select.
3. Search in selected revisions
Code:
var tfsUri = new Uri("http://nt-" + server + ":8080/tfs/NovaCollection"); var tfsCollection = new TfsTeamProjectCollection(tfsUri); try { tfsCollection.EnsureAuthenticated(); } catch (Exception ex) { System.Windows.MessageBox.Show("Ensure Authenticated failed.\n" + ex.Message + "\n" + ex.StackTrace); return ; } try { var workItemStore = tfsCollection.GetService<WorkItemStore>(); StringBuilder idsList = new StringBuilder(); var changes = workItemStore.Query(baseQuery) .Cast<WorkItem>() .SelectMany(wi => wi.Revisions .Cast<Revision>() .SelectMany(r => r.Fields .Cast<Field>() .Where(f => f.Name.Equals(primaryRevisionFieldName) && !String.IsNullOrEmpty(f.Value.ToString()) && f.Value.ToString().Contains(primaryRevisionValueContains) /*!= f.OriginalValue &&*/ ) .Select(f => (new { wi.Id, f.Value, f.ReferenceName, r.Index })))); foreach (var element in changes) { int bugId = element.Id; var workItem = workItemStore.GetWorkItem(bugId); System.Collections.IEnumerator rcEnum = workItem.Revisions.GetEnumerator(); for (int i = 0; i < element.Index + 1; i++) { rcEnum.MoveNext(); } foreach (Field fld in ((Revision)(rcEnum.Current)).Fields) { if (fld.Name.Equals(secondRevisionFieldName)) { if (fld.Value.ToString().ToLower().Contains(secondRrevisionValueContains.ToLower())) { idsList.Append(element.Id.ToString() + ","); break; } else { break; } } } }
Exception:
There is an error in XML document (1, 20783).
System.Xml.XmlException: '.', hexadecimal value 0x00, is an invalid character. Line 1, position 20783.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
at System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline(Int32 startPos, Boolean expand, StringBuilder internalSubsetBuilder, Int32& charCount, EntityType& entityType)
at System.Xml.XmlTextReaderImpl.ParseCharRefInline(Int32 startPos, Int32& charCount, EntityType& entityType)
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
at System.Xml.XmlTextReaderImpl.ParseText()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Xml.XmlReader.ReadElementString()
at Microsoft.TeamFoundation.WorkItemTracking.Proxy.RowSetRow.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at Microsoft.TeamFoundation.WorkItemTracking.Proxy.RowSet.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at Microsoft.TeamFoundation.WorkItemTracking.Proxy.RowSetCollection.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable, Boolean wrappedAny)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read34_GetWorkItemResponse()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer9.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)