IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

WCF : problème d'héritage ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut WCF : problème d'héritage ?
    Hello,

    Voici un problème que je ne comprends pas.

    Dans le cadre d'un service WCF, j'ai les classes suivantes dans le contrat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <DataContract()>
    Public Class Ticket
        Implements DTO.DtoBase
     
        <DataMember()>
        Public Property StoreNumber As Short
        <DataMember()>
        Public Property TicketDate As Date
     
        <DataMember()>
        Public Property TillNumber As Short
     
        <DataMember()>
        Public Property TicketNumber As Short
     
        <DataMember()>
        Public Property Articles As List(Of Article)
     
        Public Sub New(storeNumber As Short, ticketDate As Date, tillNumber As Short, ticketNumber As Short)
            Me.StoreNumber = storeNumber
            Me.TicketDate = ticketDate
            Me.TillNumber = tillNumber
            Me.TicketNumber = ticketNumber
            Articles = New List(Of Article)
        End Sub
    End Class
     
    <DataContract()>
    Public Class Article
        Implements DtoBase
        <DataMember()>
        Public Property Description As String
     
        <DataMember()>
        Public Property MerchendiseGroup As String
     
        <DataMember()>
        Public Property Ean As String
     
        <DataMember()>
        Public Property Ean2 As String
     
        <DataMember()>
        Public Property UnitPrice As Decimal
     
        <DataMember()>
        Public Property Quantity As Decimal
     
        <DataMember()>
        Public Property Gross As Decimal
     
        <DataMember()>
        Public Property Discount As Decimal
     
        <DataMember()>
        Public Property Net As Decimal
     
        <DataMember()>
        Public Property TaxPercent As Decimal
     
        <DataMember()>
        Public Property TaxAmount As Decimal
     
        <DataMember()>
        Public Property VatExcl As Decimal
     
        Public Sub New(description As String, merchendiseGroup As String, ean As String, ean2 As String, unitPrice As Decimal, quantity As Decimal, gross As Decimal, discount As Decimal,
                       net As Decimal, taxPercent As Decimal, taxAmount As Decimal, vatExcl As Decimal)
            Me.Description = description
            Me.MerchendiseGroup = merchendiseGroup
            Me.Ean = ean
            Me.Ean2 = ean2
            Me.UnitPrice = unitPrice
            Me.Quantity = quantity
            Me.Gross = gross
            Me.Discount = discount
            Me.Net = net
            Me.TaxPercent = taxPercent
            Me.TaxAmount = taxAmount
            Me.VatExcl = vatExcl
        End Sub
    End Class
    Côté client, j'ai donc mis une référence vers l'assembly du contrat WCF et j'ai les classes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Imports System.Data.SqlClient
     
    Public Class Ticket
        Inherits Contracts.Ticket
        Implements IDtoBase
     
        Public Sub New(storeNumber As Short, ticketDate As Date, tillNumber As Short, ticketNumber As Short)
            MyBase.New(storeNumber, ticketDate, tillNumber, ticketNumber)
        End Sub
    End Class
     
    Public Class ParserTicket
        Inherits ParserSQL
     
        Private _ordStoreNumber, _ordTicketDate, _ordTillNumber, _ordTicketNumber As Integer
     
        Public Overrides Sub PopulateOrdinals(reader As SqlDataReader)
            _ordStoreNumber = reader.GetOrdinal("STR_CODE")
            _ordTicketDate = reader.GetOrdinal("TIC_DATE")
            _ordTillNumber = reader.GetOrdinal("TIC_TILL")
            _ordTicketNumber = reader.GetOrdinal("TIC_TICKET")
        End Sub
     
        Public Overrides Function PopulateDTO(reader As SqlDataReader) As IDtoBase
            Return New Ticket(reader.GetInt16(_ordStoreNumber),
                              reader.getdatetime(_ordTicketDate),
                              reader.GetInt16(_ordTillNumber),
                              reader.GetInt16(_ordTicketNumber))
    End Function
    End Class
    En l'état, VS me donne l'erreur suivante sur l'instanciation d'une classe Ticket dans la fonction PopulateDTO (ici juste au dessus)
    Import of type 'DtoBase4 from assembly or module 'DTO.dll' failed.
    Le pire, c'est que cette classe fait partie de l'assembly DTO.dll.
    J'ai remarqué que si je retire le Inherits Contracts.Ticket, l'erreur disparait. Mais bien sûr, le constructeur de la classe Ticket n'est alors plus valide ^^.

    J'ai demandé à google ce qu'il savait sur cette erreur mais tout ce que je trouve sont des trucs sans rapport avec ce que je semble rencontrer...

    A noter que j'utilise VS2015 Pro et Resharper Ultimate 9.1.1

    Quelqu'un aurait-il déjà rencontrer cela ???

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut J'ai fini par comprendre
    J'ai fini par réaliser que le problème venait de la classe Ticket de l'assembly Contracts.

    La clause Implement DtoBase de cette classe n'avait en fait pas lieu d'être. Et effectivement, cela résoud mon problème.

    Et je crois comprendre que si j'avais réellement eu besoin de cette clause, j'aurais du importer une référence vers l'assembly DTO de ce projet-là.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Problème d'héritage, aide svp :(
    Par choas dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/05/2006, 11h46
  2. problème constructeur + héritage
    Par BOLARD dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 08h11
  3. [AS2] Problème d'héritage
    Par wwave dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 27/01/2006, 09h26
  4. Problème d'héritage ?
    Par Romanops dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2005, 17h18
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo