internal CheckInResult CheckIn(Workspace workspace, List <PendingChange> changes, string comment, Dictionary <int, WorkItemCheckinAction> workItems)
        {
            var invoker = new SoapInvoker(this);
            var msg     = invoker.CreateEnvelope("CheckIn");

            msg.Add(new XElement(MessageNs + "workspaceName", workspace.Name));
            msg.Add(new XElement(MessageNs + "ownerName", workspace.OwnerName));
            msg.Add(new XElement(MessageNs + "serverItems", changes.Select(x => x.ServerItem).Distinct().Select(s => new XElement(MessageNs + "string", s))));
            msg.Add(new XElement(MessageNs + "info",
                                 new XAttribute("date", new DateTime(0).ToString("s")),
                                 new XAttribute("cset", 0),
                                 new XAttribute("owner", workspace.OwnerName),
                                 new XElement(MessageNs + "Comment", comment),
                                 new XElement(MessageNs + "CheckinNote", string.Empty),
                                 new XElement(MessageNs + "PolicyOverride", string.Empty)));

            if (workItems != null && workItems.Count > 0)
            {
                msg.Add(new XElement(MessageNs + "checkinNotificationInfo",
                                     new XElement(MessageNs + "WorkItemInfo",
                                                  workItems.Select(wi => new XElement(MessageNs + "CheckinNotificationWorkItemInfo",
                                                                                      new XElement(MessageNs + "Id", wi.Key),
                                                                                      new XElement(MessageNs + "CheckinAction", wi.Value))))));
            }
            var response      = invoker.InvokeResponse();
            var resultElement = invoker.MethodResultExtractor(response);

            var result = CheckInResult.FromXml(resultElement);

            result.Failures = FailuresExtractor(response);
            return(result);
        }
        //    <PendChanges xmlns="http://schemas.microsoft.com/TeamFoundation/2005/06/VersionControl/ClientServices/03">
        //      <workspaceName>string</workspaceName>
        //      <ownerName>string</ownerName>
        //      <changes>
        //        <ChangeRequest req="None or Add or Branch or Encoding or Edit or Delete or Lock or Rename or Undelete or Property" did="int" enc="int" type="Any or Folder or File" lock="None or Checkin or CheckOut or Unchanged" target="string" targettype="Any or Folder or File">
        //          <item item="string" recurse="None or OneLevel or Full" did="int" />
        //          <vspec />
        //          <Properties>
        //            <PropertyValue xsi:nil="true" />
        //            <PropertyValue xsi:nil="true" />
        //          </Properties>
        //        </ChangeRequest>
        //        <ChangeRequest req="None or Add or Branch or Encoding or Edit or Delete or Lock or Rename or Undelete or Property" did="int" enc="int" type="Any or Folder or File" lock="None or Checkin or CheckOut or Unchanged" target="string" targettype="Any or Folder or File">
        //          <item item="string" recurse="None or OneLevel or Full" did="int" />
        //          <vspec />
        //          <Properties>
        //            <PropertyValue xsi:nil="true" />
        //            <PropertyValue xsi:nil="true" />
        //          </Properties>
        //        </ChangeRequest>
        //      </changes>
        //      <pendChangesOptions>int</pendChangesOptions>
        //      <supportedFeatures>int</supportedFeatures>
        //    </PendChanges>
        //      <PendChangesResult>
        //        <GetOperation type="Any or Folder or File" itemid="int" slocal="string" tlocal="string" titem="string" sitem="string" sver="int" vrevto="int" lver="int" did="int" chgEx="int" chg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" lock="None or Checkin or CheckOut or Unchanged" il="boolean" pcid="int" cnflct="boolean" cnflctchg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" cnflctchgEx="int" cnflctitemid="int" nmscnflct="unsignedByte" durl="string" enc="int" vsd="dateTime">
        //          <HashValue>base64Binary</HashValue>
        //          <Properties>
        //            <PropertyValue xsi:nil="true" />
        //            <PropertyValue xsi:nil="true" />
        //          </Properties>
        //          <PropertyValues>
        //            <PropertyValue xsi:nil="true" />
        //            <PropertyValue xsi:nil="true" />
        //          </PropertyValues>
        //        </GetOperation>
        //        <GetOperation type="Any or Folder or File" itemid="int" slocal="string" tlocal="string" titem="string" sitem="string" sver="int" vrevto="int" lver="int" did="int" chgEx="int" chg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" lock="None or Checkin or CheckOut or Unchanged" il="boolean" pcid="int" cnflct="boolean" cnflctchg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" cnflctchgEx="int" cnflctitemid="int" nmscnflct="unsignedByte" durl="string" enc="int" vsd="dateTime">
        //          <HashValue>base64Binary</HashValue>
        //          <Properties>
        //            <PropertyValue xsi:nil="true" />
        //            <PropertyValue xsi:nil="true" />
        //          </Properties>
        //          <PropertyValues>
        //            <PropertyValue xsi:nil="true" />
        //            <PropertyValue xsi:nil="true" />
        //          </PropertyValues>
        //        </GetOperation>
        //      </PendChangesResult>
        internal List <GetOperation> PendChanges(Workspace workspace, List <ChangeRequest> changeRequest, out List <Failure> failures)
        {
            var invoker = new SoapInvoker(this);
            var msg     = invoker.CreateEnvelope("PendChanges");

            msg.Add(new XElement(MessageNs + "workspaceName", workspace.Name));
            msg.Add(new XElement(MessageNs + "ownerName", workspace.OwnerName));
            msg.Add(new XElement(MessageNs + "changes", changeRequest.Select(x => x.ToXml(MessageNs))));
            var response = invoker.InvokeResponse();

            failures = FailuresExtractor(response);
            var result = invoker.MethodResultExtractor(response);

            return(result.Elements(MessageNs + "GetOperation").Select(GetOperation.FromXml).ToList());
        }
        internal ResolveResult Resolve(Conflict conflict, ResolutionType resolutionType)
        {
            var invoker = new SoapInvoker(this);
            var msg     = invoker.CreateEnvelope("Resolve");

            msg.Add(new XElement(MessageNs + "workspaceName", conflict.Workspace.Name));
            msg.Add(new XElement(MessageNs + "ownerName", conflict.Workspace.OwnerName));
            msg.Add(new XElement(MessageNs + "conflictId", conflict.ConflictId));
            msg.Add(new XElement(MessageNs + "resolution", resolutionType));
            var           response = invoker.InvokeResponse();
            ResolveResult result   = new ResolveResult();

            result.GetOperations     = GetOperationExtractor(invoker.MethodResultExtractor(response));
            result.UndoOperations    = GetOperationExtractor(response.Element(MessageNs + "undoOperations"));
            result.ResolvedConflicts = ConflictExtractor(response.Element(MessageNs + "resolvedConflicts"), conflict.Workspace);
            return(result);
        }
 internal ResolveResult Resolve(Conflict conflict, ResolutionType resolutionType)
 {
     var invoker = new SoapInvoker(this);
     var msg = invoker.CreateEnvelope("Resolve");
     msg.Add(new XElement(MessageNs + "workspaceName", conflict.Workspace.Name));
     msg.Add(new XElement(MessageNs + "ownerName", conflict.Workspace.OwnerName));
     msg.Add(new XElement(MessageNs + "conflictId", conflict.ConflictId));
     msg.Add(new XElement(MessageNs + "resolution", resolutionType));
     var response = invoker.InvokeResponse();
     ResolveResult result = new ResolveResult();
     result.GetOperations = GetOperationExtractor(invoker.MethodResultExtractor(response));
     result.UndoOperations = GetOperationExtractor(response.Element(MessageNs + "undoOperations"));
     result.ResolvedConflicts = ConflictExtractor(response.Element(MessageNs + "resolvedConflicts"), conflict.Workspace);
     return result;
 }
        internal CheckInResult CheckIn(Workspace workspace, List<PendingChange> changes, string comment, Dictionary<int, WorkItemCheckinAction> workItems)
        {
            var invoker = new SoapInvoker(this);
            var msg = invoker.CreateEnvelope("CheckIn");
            msg.Add(new XElement(MessageNs + "workspaceName", workspace.Name));
            msg.Add(new XElement(MessageNs + "ownerName", workspace.OwnerName));
            msg.Add(new XElement(MessageNs + "serverItems", changes.Select(x => x.ServerItem).Distinct().Select(s => new XElement(MessageNs + "string", s))));
            msg.Add(new XElement(MessageNs + "info",
                new XAttribute("date", new DateTime(0).ToString("s")),
                new XAttribute("cset", 0),
                new XAttribute("owner", workspace.OwnerName),
                new XElement(MessageNs + "Comment", comment),
                new XElement(MessageNs + "CheckinNote", string.Empty),
                new XElement(MessageNs + "PolicyOverride", string.Empty)));

            if (workItems != null && workItems.Count > 0)
            {
                msg.Add(new XElement(MessageNs + "checkinNotificationInfo",
                    new XElement(MessageNs + "WorkItemInfo",
                        workItems.Select(wi => new XElement(MessageNs + "CheckinNotificationWorkItemInfo", 
                            new XElement(MessageNs + "Id", wi.Key), 
                            new XElement(MessageNs + "CheckinAction", wi.Value))))));
            }
            var response = invoker.InvokeResponse();
            var resultElement = invoker.MethodResultExtractor(response);

            var result = CheckInResult.FromXml(resultElement);
            result.Failures = FailuresExtractor(response);
            return result;
        }
 //    <PendChanges xmlns="http://schemas.microsoft.com/TeamFoundation/2005/06/VersionControl/ClientServices/03">
 //      <workspaceName>string</workspaceName>
 //      <ownerName>string</ownerName>
 //      <changes>
 //        <ChangeRequest req="None or Add or Branch or Encoding or Edit or Delete or Lock or Rename or Undelete or Property" did="int" enc="int" type="Any or Folder or File" lock="None or Checkin or CheckOut or Unchanged" target="string" targettype="Any or Folder or File">
 //          <item item="string" recurse="None or OneLevel or Full" did="int" />
 //          <vspec />
 //          <Properties>
 //            <PropertyValue xsi:nil="true" />
 //            <PropertyValue xsi:nil="true" />
 //          </Properties>
 //        </ChangeRequest>
 //        <ChangeRequest req="None or Add or Branch or Encoding or Edit or Delete or Lock or Rename or Undelete or Property" did="int" enc="int" type="Any or Folder or File" lock="None or Checkin or CheckOut or Unchanged" target="string" targettype="Any or Folder or File">
 //          <item item="string" recurse="None or OneLevel or Full" did="int" />
 //          <vspec />
 //          <Properties>
 //            <PropertyValue xsi:nil="true" />
 //            <PropertyValue xsi:nil="true" />
 //          </Properties>
 //        </ChangeRequest>
 //      </changes>
 //      <pendChangesOptions>int</pendChangesOptions>
 //      <supportedFeatures>int</supportedFeatures>
 //    </PendChanges>
 //      <PendChangesResult>
 //        <GetOperation type="Any or Folder or File" itemid="int" slocal="string" tlocal="string" titem="string" sitem="string" sver="int" vrevto="int" lver="int" did="int" chgEx="int" chg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" lock="None or Checkin or CheckOut or Unchanged" il="boolean" pcid="int" cnflct="boolean" cnflctchg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" cnflctchgEx="int" cnflctitemid="int" nmscnflct="unsignedByte" durl="string" enc="int" vsd="dateTime">
 //          <HashValue>base64Binary</HashValue>
 //          <Properties>
 //            <PropertyValue xsi:nil="true" />
 //            <PropertyValue xsi:nil="true" />
 //          </Properties>
 //          <PropertyValues>
 //            <PropertyValue xsi:nil="true" />
 //            <PropertyValue xsi:nil="true" />
 //          </PropertyValues>
 //        </GetOperation>
 //        <GetOperation type="Any or Folder or File" itemid="int" slocal="string" tlocal="string" titem="string" sitem="string" sver="int" vrevto="int" lver="int" did="int" chgEx="int" chg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" lock="None or Checkin or CheckOut or Unchanged" il="boolean" pcid="int" cnflct="boolean" cnflctchg="None or Add or Edit or Encoding or Rename or Delete or Undelete or Branch or Merge or Lock or Rollback or SourceRename or Property" cnflctchgEx="int" cnflctitemid="int" nmscnflct="unsignedByte" durl="string" enc="int" vsd="dateTime">
 //          <HashValue>base64Binary</HashValue>
 //          <Properties>
 //            <PropertyValue xsi:nil="true" />
 //            <PropertyValue xsi:nil="true" />
 //          </Properties>
 //          <PropertyValues>
 //            <PropertyValue xsi:nil="true" />
 //            <PropertyValue xsi:nil="true" />
 //          </PropertyValues>
 //        </GetOperation>
 //      </PendChangesResult>
 internal List<GetOperation> PendChanges(Workspace workspace, List<ChangeRequest> changeRequest, out List<Failure> failures)
 {
     var invoker = new SoapInvoker(this);
     var msg = invoker.CreateEnvelope("PendChanges");
     msg.Add(new XElement(MessageNs + "workspaceName", workspace.Name));
     msg.Add(new XElement(MessageNs + "ownerName", workspace.OwnerName));
     msg.Add(new XElement(MessageNs + "changes", changeRequest.Select(x => x.ToXml(MessageNs))));
     var response = invoker.InvokeResponse();
     failures = FailuresExtractor(response);
     var result = invoker.MethodResultExtractor(response);
     return result.Elements(MessageNs + "GetOperation").Select(GetOperation.FromXml).ToList();
 }