部署后HTTPS Web服务调用失败

时间:2015-04-08 10:42:25

标签: asp.net-mvc azure iis-7.5

我在部署应用程序方面没有太多经验。

我有一个ASP.Net应用程序,我通过HTTPS向第三方Web服务执行调用。 webservice返回一个xml字符串,然后我在我这边解析。在我的开发环境中,这非常有效。但是,当我部署应用程序(到生产VM)时,webservice莫名其妙地不会返回任何内容,我的解析步骤会抛出一个空引用异常。

有关生产环境的更多信息:

  1. 我配置了运行Windows Server 2008的Azure VM,并将我的应用程序直接从Visual Studio 2013发布到VM。我在DefaultAppPool中的IIS 7.5上托管应用程序。
  2. 我可以通过IE从VM浏览web服务的wsdl(通过远程桌面连接)
  3. 我尝试在受信任的证书颁发机构下安装https证书>在VM上本地,然后运行IISRESET。
  4. 我试图完全关闭VM上的防火墙,但服务调用仍然失败。
  5. 第三方服务提供商已确认他们没有看到来自我网站的任何流量。
  6. 当我从开发环境运行应用程序但使用生产数据库时,它仍然有效,因此我的数据绝对不是问题 [更新]
  7. 服务调用似乎无声地失败,因为事件日志仅列出空引用异常,没有特别与服务调用有关。

    我错过了什么?

    UPDATE:

     public void RunEnquiry(Client Client, string ResultType = "XPDF")
        {
            NormalSearch_Live_Service.NormalSearchServiceClient csClient = new NormalSearch_Live_Service.NormalSearchServiceClient();
    
            using (var db = new CreditBureauxDbContext())
            {
                // --== Step 1: Create the enquiry data-entities ==--
                var eb = new EnquiryBlock
                {
                    CS_Data = "Y",
                    CPA_Plus_NLR_Data = "N",
                    Deeds_Data = "N",
                    Directors_Data = "N",
                    Identity_number = Client.Person.IDNumber.Truncate(13),
                    Surname = Client.Person.Surname.Truncate(25),
                    Forename = Client.Person.FullNames.Trim().Split(' ').Count() > 0 ? Client.Person.FullNames.Trim().Split(' ')[0].Truncate(15) : "",
                    Forename2 = Client.Person.FullNames.Trim().Split(' ').Count() > 1 ? Client.Person.FullNames.Trim().Split(' ')[1].Truncate(15) : "",
                    Forename3 = Client.Person.FullNames.Trim().Split(' ').Count() > 2 ? Client.Person.FullNames.Trim().Split(' ')[2].Truncate(15) : "",
                    Gender = Client.Person.Gender.Truncate(1),
                    Passport_flag = "N",
                    DateOfBirth = DateTime.Parse(Client.Person.DateOfBirthUTC).ToString("yyyyMMdd"),
                    Address1 = "",
                    Address2 = "",
                    Address3 = "",
                    Address4 = "",
                    PostalCode = "",
                    HomeTelCode = "",
                    HomeTelNo = "",
                    WorkTelCode = "",
                    WorkTelNo = "",
                    CellTelNo = "",
                    ResultType = ResultType,
                    RunCodix = "N",
                    Adrs_Mandatory = "N",
                    Enq_Purpose = db.EnquiryPurposes.FirstOrDefault(ep => ep.Description.ToUpper().Contains("CREDIT ASSESSMENT")).Value,
                    Run_CompuScore = "N",
                    ClientConsent = "Y"
                };
    
                var enq = new Enquiry
                {
                    pInput_Format = "XML",
                    pOrigin = "CrediScan",
                    pOrigin_Version = "1.0",
                    pVersion = "1.0",
                    Parameters = eb,
                    RequestSent_TimestampUTC = DateTime.UtcNow.ToString()
                };
    
                using (var settings = new GlobalConfigDbContext())
                {
                    // --== Step 2: Construct & perform service call ==--                
                    var param = new NormalSearch_Live_Service.NormalEnqRequestParamsType
                    {
                        pInput_Format = "XML",
                        pOrigin = "CrediScan",
                        pOrigin_Version = "1.0",
                        pUsrnme = settings.GetSettingValueAsString("Credit Check: PROD Username"),
                        pPasswrd = settings.GetSettingValueAsString("Credit Check: PROD Password"),
                        pVersion = "1.0",
                        pTransaction = String.Format("<Transactions>{0}</Transactions>", eb.ToXML())
                    };
    
                    var result = csClient.DoNormalEnquiry(param);
    
                    // --== Step 3: Create enquiry result data-entities  ==--
                    var er = new EnquiryResult
                    {
                        ErrorCode = result.errorCode,
                        ErrorString = result.errorString,
                        TransactionCompleted = result.transactionCompleted,
                        RetData = result.retData
                    };
    
                    enq.EnquiryResult = er;
    
                    Trace.TraceInformation("RETDATA" + Environment.NewLine + result.retData);
    
                    var retDataDecoded = result.retData.DecodeBase64ToByteArray();
    
                    if (!Encoding.UTF8.GetString(retDataDecoded, 0, 2).Equals("PK") || retDataDecoded.Length <= 5)
                        throw new FormatException("The data returned from CreditBureaux is not in the correct format or contains an error.");
    
                    // --== Step 4: Save the query and validated results to database ==--
                    try
                    {
                        db.Enquiries.Add(enq);
                        db.SaveChanges();
                    }
                    catch (DbEntityValidationException dbe)
                    {
                        Trace.TraceError(dbe.ToString());
                        throw;
                    }
    
                    // --== Step 5: Parse the results ==--
    
                    if (ResultType.Equals("XML"))
                    {
                        if (!Encoding.UTF8.GetString(retDataDecoded, 0, 2).Equals("PK") || retDataDecoded.Length <= 5)
                            throw new FormatException("The data returned from CreditBureaux is not in the correct format or contains an error.");
                        Trace.TraceInformation("\n\n\n" + retDataDecoded.UnZipToMemoryList()[0].ReadToString() + "\n\n\n");
                    }
    
                    if (ResultType.Equals("XPDF"))
                    {
                        Trace.TraceInformation("UNZIPPING PDF");
                        Trace.TraceInformation("RETDATA" + Environment.NewLine + result.retData);
                        var xmlDoc = XDocument.Parse("<?xml version=\"1.0\"?>" + retDataDecoded.UnZipToMemoryList()[0].ReadToString()); //Important!
    
    
                        var summaryItems = xmlDoc
                            .Root
                            .Element("EnqCC_ENQ_COUNTS")
                            .Element("ROW")
                           .Elements()
                           .Select(dn => new EnquirySummaryItem
                           {
                               Key = dn.Name.ToString(),
                               Value = dn.Value
                           })
                           .ToList();
    
                        var summary = new EnquirySummary
                        {
                            Enquiry_Id = xmlDoc.Root.Element("Enquiry_ID").Value,
                            EnquiryDate = xmlDoc.Root.Element("EnqCC_SRCHCRITERIA").Descendants("ENQ_DATE").ElementAt(0).Value,
                            EnquiryResult = enq.EnquiryResult,
                            SummaryItems = summaryItems
                        };
    
                        try
                        {
                            db.EnquirySummaries.Add(summary);
                            db.SaveChanges();
                        }
                        catch (DbEntityValidationException dbe)
                        {
                            Trace.TraceError(dbe.ToString());
                            throw;
                        }
    
    
                        var directory = settings.GetSettingValueAsString("Document Management: Client Documents Root Path").TrimEnd('\\') + "\\CreditBureaux\\" ;
    
                        var fileName = summary.Enquiry_Id + ".pdf";
    
                        FileHandlingFactory.Create().SaveFile(xmlDoc.Root.Element("CC_PDF_RESULTS").Value.DecodeBase64ToByteArray().ToMemoryStream(), directory, fileName);
    
                        docMan.Add_Document(
                            new FileItem { 
                                CreatedOn_TimeStampUTC = DateTime.UtcNow,
                                FilePathOnServer = directory,
                                PrivateFileName = fileName,
                                PublicFileName = (Client.Person.Surname + Client.Person.NickName[0]) + "_" + fileName,
                                MimeType = "application/pdf"
                            },
                            docMan.FindOrCreate_ContextInstance(
                                docMan.Get_ContextClass("Client"),
                                new Dictionary<string, string>(){
                                    {"ClientId",Client.Id.ToString()}
                                }),
                             new List<DocumentClass> { docMan.Get_DocumentClass("CreditBureaux enquiry") });
                        //xmlDoc.Root.Element("CC_PDF_RESULTS").Value
                        //.DecodeBase64ToByteArray()
                        //.SaveToFile(directory, summary.Enquiry_Id + ".pdf");
    
                    }
                }
            }
        }
    

    要跟随的堆栈跟踪:

      应用程序中的服务器错误。

         

    值不能为空。参数名称:s

         

    描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

         

    异常详细信息:System.ArgumentNullException:值不能为null。   参数名称:s

         

    来源错误:

         

    执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

         

    堆栈追踪:

         

    [ArgumentNullException:Value不能为null。参数名称:s]
      System.Convert.FromBase64String(String s)+14073970
      SomeCompany.CreditBureaux.BLL.CreditBureauxLiveClient.RunEnquiry(客户端   Client,String ResultType)+2270
      SomeCompany.CrediScan.UI.Views.ClientController.CreditCheck(Int64 id)   +264 lambda_method(Closure,ControllerBase,Object [])+114 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext   controllerContext,IDictionary 2 parameters) +242
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
    2   参数)+39
      System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult的   asyncResult,ActionInvocation innerInvokeState)+12
      System.Web.Mvc.Async.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) +139
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +112 System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +452 System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +15
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +37 System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
    System.Web.Mvc.Async.WrappedAsyncVoid
    1.CallEndDelegate(IAsyncResult的   asyncResult)+111
      System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+53   System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +19
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
    System.Web.Mvc.Async.WrappedAsyncVoid
    1.CallEndDelegate(IAsyncResult的   asyncResult)+111
      System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +606 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+288

0 个答案:

没有答案