2014-06-20 9 views
6

Sto cercando di integrare Fedex Servizio nel mio asp.net sito. Ho scaricato il codice dal sito Fedex, ma quando ho eseguito questo semplice programma ottengo un errore, Controllare il seguente codice:Fedex Integration Service Errore (in grado di generare una classe temporanea)

static void Main(string[] args) 
{ 
    TrackRequest request = CreateTrackRequest(); 
    TrackService service = new TrackService();//I get Error Here 
    if (usePropertyFile()) 
    { 
     service.Url = getProperty("endpoint"); 
    } 
    try 
    { 
     // Call the Track web service passing in a TrackRequest and returning a TrackReply 
     TrackReply reply = service.track(request); 
     if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) 
     { 
      ShowTrackReply(reply); 
     }   
     ShowNotifications(reply); 
    } 
    catch (SoapException e) 
    { 
     Console.WriteLine(e.Detail.InnerText); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
    }   
    Console.WriteLine("Press any key to quit!"); 
    Console.ReadKey(); 
} 

L'errore Dopo il debug si è verificato il TrackService service = new TrackService(); (linea 5 #):

Impossibile generare una classe temporanea (risultato = 1). errore CS0029: Impossibile convertire implicitamente il tipo 'TrackWebServiceClient.TrackServiceWebReference.EMailNotificationEventType' a 'TrackWebServiceClient.TrackServiceWebReference.EMailNotificationEventType []'

+0

È TrackService solo un 'POCO' che è possibile creare un'istanza? Se si tratta di un servizio Web, penserei che FedEx fornirebbe un WSDL che si aggiungerà al progetto come riferimento Web e quindi utilizzerà lo stub generato per chiamare il metodo "traccia". –

risposta

16

Questo potrebbe essere un problema con il modo in cui WSDL.exe genera il codice client.

È necessario modificare manualmente il file Reference.cs per sostituire le parentesi quadre [][] in singolo [] nella definizione EmailNotificationEventType.

Da Microsoft:

Non v'è alcuna risoluzione a questo punto. Tuttavia, tre soluzioni sono disponibili:

  • è possibile generare la classe proxy manualmente utilizzando WSDL.exe e quindi modificare la classe proxy in cui il tipo di dati è stato impropriamente creato come un array bidimensionale (ad esempio " CustomType [] [] ") in modo che sia una matrice monodimensionale (ad esempio," CustomType [] ").
  • È possibile modificare il tipo di dati nel WSDL (Web Services Description Language) desiderato in modo che un secondo elemento facoltativo sia incluso nella definizione. È possibile farlo aggiungendo un elemento come il seguente: <xs:element minOccurs="0" name="dummyElement" nillable="true" type="xs:string"/>
  • È possibile modificare il tipo complesso nel WSDL desiderato in modo che gli attributi del contorno facciano parte del tipo complesso anziché essere parte dell'elemento. (Cioè, è possibile spostare i minOccurs e maxOccurs attribuisce al tipo complesso e poi rimuoverli dal elemento.)

controllare anche questo link per ulteriori spiegazioni.

+1

Dovrai modificare manualmente il file Reference.cs per sostituire le parentesi quadre [] [] per singolo [] nella definizione EmailNotificationEventType ... funziona ... grazie –

+0

Quindi questo ha corretto il mio problema, tuttavia, ora non sono in grado per ottenere le EmailNotifications da FedEx, e FedEx non riesce a capire perché, a causa della corretta richiesta. Qualcun altro ha questo problema? (FYI: Il team di messaggistica ha già confermato che l'indirizzo email di trackingupdates (at) fedex.com è autorizzato) –

+0

risposta molto utile, grazie :) –

0

Ho provato la terza opzione "È possibile modificare il tipo complesso nel WSDL desiderato in modo che gli attributi del limite facciano parte del tipo complesso anziché essere parte dell'elemento. (Ovvero, è possibile spostare minOccurs e maxOccurs attributi al tipo complesso e quindi rimuoverli dall'elemento.) "e ha funzionato. La soluzione qui di seguito:

Rimosso dal WSDL le minOccurs e maxOccurs per l'elemento NotificationEventsAvailable [vedere l'immagine qui sotto]

Click to see the image

+0

Si prega di [modificare] di includere il codice come * codice *, piuttosto che un'immagine. Rende più facile per qualcun altro cercare e leggere la tua risposta. – whrrgarbl

Problemi correlati