Проблема с веб-службой проверки адресов FedEx - PullRequest
0 голосов
/ 02 ноября 2009

Я пытаюсь начать работу со службой проверки адресов Fedex, и я сталкиваюсь с препятствиями с помощью собственного демонстрационного приложения FedEx.

Это код приложения:

Sub Main()

    ''# Build a AddressValidationRequest object
    Dim request As AddressValidationRequest = New AddressValidationRequest()

    Console.WriteLine("--- Setting Credentials ---")
    request.WebAuthenticationDetail = New WebAuthenticationDetail()
    request.WebAuthenticationDetail.UserCredential = New WebAuthenticationCredential()
    request.WebAuthenticationDetail.UserCredential.Key = "###" ''# Replace "XXX" with the Key
    request.WebAuthenticationDetail.UserCredential.Password = "###" ''# Replace "XXX" with the Password

    Console.WriteLine("--- Setting Account Information ---")
    request.ClientDetail = New ClientDetail()
    request.ClientDetail.AccountNumber = "###" ''# Replace "XXX" with clients account number
    request.ClientDetail.MeterNumber = "###" ''# Replace "XXX" with clients meter number
    request.TransactionDetail = New TransactionDetail()
    request.TransactionDetail.CustomerTransactionId = "Address Validation v2 Request using VB.NET Sample Code" ''# This is just an echo back 
    request.Version = New VersionId()

    request.RequestTimestamp = DateTime.Now

    Console.WriteLine("--- Setting Validation Options ---")
    request.Options = New AddressValidationOptions()
    request.Options.CheckResidentialStatus = True
    request.Options.MaximumNumberOfMatches = 5
    request.Options.StreetAccuracy = AddressValidationAccuracyType.LOOSE
    request.Options.DirectionalAccuracy = AddressValidationAccuracyType.LOOSE
    request.Options.CompanyNameAccuracy = AddressValidationAccuracyType.LOOSE
    request.Options.ConvertToUpperCase = True
    request.Options.RecognizeAlternateCityNames = True
    request.Options.ReturnParsedElements = True

    Console.WriteLine("--- Address 1 ---")
    request.AddressesToValidate = New AddressToValidate(1) {New AddressToValidate(), New AddressToValidate()}
    request.AddressesToValidate(0).AddressId = "WTC"
    request.AddressesToValidate(0).Address = New Address()
    request.AddressesToValidate(0).Address.StreetLines = New String(0) {"10 FedEx Parkway"}
    request.AddressesToValidate(0).Address.PostalCode = "38017"
    request.AddressesToValidate(0).CompanyName = "FedEx Services"

    Console.WriteLine("--- Address 2 ---")
    request.AddressesToValidate(1).AddressId = "Kinkos"
    request.AddressesToValidate(1).Address = New Address()
    request.AddressesToValidate(1).Address.StreetLines = New String(0) {"50 N Front St"}
    request.AddressesToValidate(1).Address.PostalCode = "38103"
    request.AddressesToValidate(1).CompanyName = "FedEx Kinkos"

    Dim addressValidationService As AddressValidationService.AddressValidationService = New AddressValidationService.AddressValidationService
    ''#

    Try
        ''# This is the call to the web service passing in a AddressValidationRequest and returning a AddressValidationReply
        Console.WriteLine("--- Sending Request..... ---")
        Dim reply As New AddressValidationReply()
        reply = addressValidationService.addressValidation(request)


        Console.WriteLine("--- Processing request.... ---")
        ''#This is where I get the error 
        If (Not reply.HighestSeverity = NotificationSeverityType.ERROR) And (Not reply.HighestSeverity = NotificationSeverityType.FAILURE) Then
            If (Not reply.AddressResults Is Nothing) Then
                For Each result As AddressValidationResult In reply.AddressResults
                    Console.WriteLine("Address Id - " + result.AddressId)
                    Console.WriteLine("--- Proposed Details ---")
                    If (Not result.ProposedAddressDetails Is Nothing) Then
                        For Each detail As ProposedAddressDetail In result.ProposedAddressDetails
                            Console.WriteLine("Score - " + detail.Score)
                            Console.WriteLine("Address - " + detail.Address.StreetLines(0))
                            Console.WriteLine("          " + detail.Address.StateOrProvinceCode + " " + detail.Address.PostalCode + " " + detail.Address.CountryCode)
                            Console.WriteLine("Changes -")
                            For Each change As AddressValidationChangeType In detail.Changes
                                Console.WriteLine(change.ToString())
                            Next
                            Console.WriteLine("")
                        Next
                    End If
                    Console.WriteLine("")
                Next
            End If
        Else
            For Each notification As Notification In reply.Notifications
                Console.WriteLine(notification.Message)
            Next
        End If
    Catch e As SoapException
        Console.WriteLine(e.Detail.InnerText)
    Catch e As Exception
        Console.WriteLine(e.Message)
    End Try
    Console.WriteLine("Press any key to quit !")
    Console.ReadKey()
End Sub

кажется для отправки объекта запроса в веб-службу, но объект «reply» возвращается с «Nothing». Я мог бы понять, если бы я написал код, но, боже мой ... они даже не могут заставить свой собственный код работать? Кто-нибудь еще видел / исправил эту проблему?

1 Ответ

0 голосов
/ 03 ноября 2009

Приложение показывает некоторые контрольные признаки того, что сначала он был написан на C #, а затем преобразован в VB.Net. В частности:

Dim request As AddressValidationRequest = New AddressValidationRequest()

Можно сократить до простого:

Dim request As New AddressValidationRequest()

.

If (Not reply.HighestSeverity = NotificationSeverityType.ERROR) And (Not reply.HighestSeverity = NotificationSeverityType.FAILURE) Then

можно написать несколькими способами, но, по крайней мере, я ожидаю, что программист на чистом VB будет знать либо AndAlso вместо And, либо <> вместо Not ... = .... Наконец:

Dim reply As New AddressValidationReply()
reply = addressValidationService.addressValidation(request)

создает новый объект и незамедлительно отбрасывает его.

...