2017-02-23 12 views
5

私はasp.net mvc 5アプリケーションでUPSトラッキングAPIを実装しています。私は以下の方法で作成しました。「リモート側がトランスポートストリームを閉じたために認証に失敗しました。」 APIトラッキングを呼び出す際には、UPSトラッキングレストサービス

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; 
    } 
} 

これはローカルマシンから呼び出すときに問題なく動作します。 AWSサーバーにアプリケーションをデプロイしても、それは私にはあまり例外を与えません。理由は何か、私は今固執しています。

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

フレームワークのバージョンがそのAWSサーバーとローカルマシンにインストールされているどのような.NET? – Evk

+0

証明書の認証が必要な場合があります – Amorphis

+0

使用しているアクセスキーはローカルのdevマシン(localhost:***)に対してのみ有効ですが、サーバーに展開されてからドメインが変更されアクセスキーが変更されない可能性があります要求元のクライアントに対して有効です。 – Gurpreet

答えて

3

前にWebサービスへの呼び出しを行うには、コード内でこのどこかを追加してみてください:

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

これは私のコードの中にすでにあります。 –

+0

これは私のために修正されました – brendonparker

+0

これは私のローカルIISでのみ動作しています、AWS上にデプロイされても動作しません。 –

関連する問題