2017-02-23 11 views
5

Implementuję API śledzenia UPS w mojej aplikacji asp.net mvc 5. Stworzyłem poniższą metodę.Uzyskiwanie "Uwierzytelnianie nie powiodło się, ponieważ zdalna strona zamknęła strumień transportu." podczas wykonywania wywołania API do śledzenia UPS Rest service

public virtual Core.UPSTrackingResponse.UPSTrackingResponse TrackUPS(string trackingNumber) 
{ 
    Core.UPSTrackingRequest.UPSTrackingRequest requestModal = new Core.UPSTrackingRequest.UPSTrackingRequest(); 
    requestModal.UPSSecurity.ServiceAccessToken.AccessLicenseNumber = UPSAccessKey; 
    requestModal.UPSSecurity.UsernameToken.Username = UPSUserId; 
    requestModal.UPSSecurity.UsernameToken.Password = UPSPassword; 
    requestModal.TrackRequest.InquiryNumber = trackingNumber; 
    requestModal.TrackRequest.Request.RequestOption = "1"; 
    requestModal.TrackRequest.Request.TransactionReference.CustomerContext = trackingNumber + " tracking context"; 

    string Data = new JavaScriptSerializer().Serialize(requestModal); 
    string response = ""; 
    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(UPSTrackingURL); // https://wwwcie.ups.com/rest/Track 
    request.Method = "POST"; 
    request.KeepAlive = false; 
    request.ProtocolVersion = HttpVersion.Version10; 

    request.ContentType = @"application/json"; 
    request.ContentLength = Data.Length; 

    StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); 
    requestWriter.Write(Data); 
    requestWriter.Close(); 

    try 
    { 
     WebResponse webResponse = request.GetResponse(); 
     Stream webStream = webResponse.GetResponseStream(); 
     StreamReader responseReader = new StreamReader(webStream); 
     response = responseReader.ReadToEnd(); 
     Console.Out.WriteLine(response); 
     responseReader.Close(); 
     Nop.Core.UPSTrackingResponse.UPSTrackingResponse ResponseModal = 
      new JavaScriptSerializer().Deserialize<Nop.Core.UPSTrackingResponse.UPSTrackingResponse>(response); 
     return ResponseModal; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 

Działa to dobrze, gdy wywołuję go z mojego lokalnego komputera. ale kiedy wdrożyłem moją aplikację na serwerze AWS, nadal daje mi poniżej wyjątek. Jaki mógł być powód, utknąłem teraz.

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream. 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) 
    at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.ConnectStream.WriteHeaders(Boolean async) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 
    at System.Net.HttpWebRequest.GetRequestStream() 
    at Nop.Services.Shipping.ShippingService.TrackUPS(String trackingNumber) 
    at Nop.Web.Controllers.OrderController.PrepareShipmentDetailsModel(Shipment shipment) 
    at Nop.Web.Controllers.OrderController.ShipmentDetails(Int32 shipmentId) 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
+0

Co .NET Framework jest zainstalowany na tym serwerze AWS i lokalnym komputerze? – Evk

+0

może być konieczne uwierzytelnianie certyfikatu – Amorphis

+0

jest to możliwe, że klucz dostępu, którego używasz, jest poprawny tylko dla lokalnego urządzenia deweloperskiego (localhost: ***), ale jest wdrażany na serwerze, a następnie zmienia się domena, aby klucz dostępu nie był ważne dla tego klienta wnioskującego. – Gurpreet

Odpowiedz

3

warto dodać to gdzieś w kodzie, przed dokonaniem połączenia z usługa:

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 
             | System.Net.SecurityProtocolType.Tls 
             | System.Net.SecurityProtocolType.Tls11 
             | System.Net.SecurityProtocolType.Tls12; 
+0

Te są już w moim kodzie. –

+0

Naprawiono to dla mnie – brendonparker

+0

działa tylko w moim lokalnym IIS, po wdrożeniu przez AWS, to nie działa, –

Powiązane problemy