/// <summary>
        /// Gets all events for a tracking number.
        /// </summary>
        /// <param name="trackingNumber">The tracking number to track</param>
        /// <returns>List of Shipment Events.</returns>
        public virtual IList<ShipmentStatusEvent> GetShipmentEvents(string trackingNumber)
        {
            if (string.IsNullOrEmpty(trackingNumber))
                return new List<ShipmentStatusEvent>();

            var result = new List<ShipmentStatusEvent>();
            try
            {
                //use try-catch to ensure exception won't be thrown is web service is not available

                var track = new TrackService();
                var tr = new TrackRequest();
                var upss = new UPSSecurity();
                var upssSvcAccessToken = new UPSSecurityServiceAccessToken();
                upssSvcAccessToken.AccessLicenseNumber = _upsSettings.AccessKey;
                upss.ServiceAccessToken = upssSvcAccessToken;
                var upssUsrNameToken = new UPSSecurityUsernameToken();
                upssUsrNameToken.Username = _upsSettings.Username;
                upssUsrNameToken.Password = _upsSettings.Password;
                upss.UsernameToken = upssUsrNameToken;
                track.UPSSecurityValue = upss;
                var request = new RequestType();
                string[] requestOption = { "15" };
                request.RequestOption = requestOption;
                tr.Request = request;
                tr.InquiryNumber = trackingNumber;
                System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
                var trackResponse = track.ProcessTrack(tr);
                result.AddRange(trackResponse.Shipment.SelectMany(c => c.Package[0].Activity.Select(ToStatusEvent)).ToList());
            }
            catch (SoapException ex)
            {
                var sb = new StringBuilder();
                sb.AppendFormat("SoapException Message= {0}.", ex.Message);
                sb.AppendFormat("SoapException Category:Code:Message= {0}.", ex.Detail.LastChild.InnerText);
                //sb.AppendFormat("SoapException XML String for all= {0}.", ex.Detail.LastChild.OuterXml);
                _logger.Error(string.Format("Error while getting UPS shipment tracking info - {0}", trackingNumber), new Exception(sb.ToString()));
            }
            catch (Exception exc)
            {
                _logger.Error(string.Format("Error while getting UPS shipment tracking info - {0}", trackingNumber), exc);
            }
            return result;
        }
示例#2
0
 /// <remarks/>
 public void ProcessTrackAsync(TrackRequest TrackRequest) {
     this.ProcessTrackAsync(TrackRequest, null);
 }
示例#3
0
 /// <remarks/>
 public void ProcessTrackAsync(TrackRequest TrackRequest, object userState) {
     if ((this.ProcessTrackOperationCompleted == null)) {
         this.ProcessTrackOperationCompleted = new System.Threading.SendOrPostCallback(this.OnProcessTrackOperationCompleted);
     }
     this.InvokeAsync("ProcessTrack", new object[] {
                 TrackRequest}, this.ProcessTrackOperationCompleted, userState);
 }