none
Faire appel à un web service dans une librairie .NET RRS feed

  • Question

  • Bonjour,

    J'aimerais migrer un projet vb.net que j'ai fait en version windev, le soucis est que je n'arrive pas à utiliser un web service.

    Le web service que j'utilise (dont voici l'url vers la wsdl) permet d'envoyer un fichier XML compressé au format ZIP, en retour, je reçois un fichier XML compressé au format ZIP, ce fichier XML en retour me dit si le fichier que j'ai envoyé a été accepté ou refusé.

    Dans ce web service, j'utilise la méthode SendBill, qui a pour paramètre :

    - fileName : de type string, contient le nom du fichier (doit contenir l’extension .ZIP dans le nom)

    - contentFile : de type tableau de bytes, contient le fichier ZIP à envoyer

    En retour, je reçois un tableau de bytes, qui contient la réponse du web service.

    Dans mes tests, j'essaye d'envoyer ce fichier, dans ce cas, il faudra mettre dans le paramètre fileName la valeur 20450835600-01-FF11-56.zip

    Ce web service nécessite une connexion, voici les identifiants :

    utilisateur : xxxxxxxxxxxxxx
    mot de passe : xxxxxx

    Afin de contourner le problème d'appel du web service dans mon projet windev, j'ai voulu générer une librairie (à l'aide de visual studio 2010), j'ai mis le code suivant :

    Public Class ServiceSunat
        Private _ZIPFile As String
        Private _ZIPFileResponse As String
        Private _sunat_ruc As String
    
        Public Property ZIPFile()
            Get
                Return _ZIPFile
            End Get
            Set(value)
                _ZIPFile = value
            End Set
        End Property
    
        Public Property ZIPFileResponse()
            Get
                Return _ZIPFileResponse
            End Get
            Set(value)
                _ZIPFileResponse = value
            End Set
        End Property
    
        Public Property sunat_ruc()
            Get
                Return _sunat_ruc
            End Get
            Set(value)
                _sunat_ruc = value
            End Set
        End Property
    
        Public Function SendXMLFile() As String
            Try
                If _ZIPFile = "" Then
                    Throw New Exception("The ZIPFile value is missing")
                End If
    
                If _ZIPFileResponse = "" Then
                    Throw New Exception("The ZIPFileResponse value is missing")
                End If
    
                If _sunat_ruc = "" Then
                    Throw New Exception("The sunat_ruc value is missing")
                End If
    
                Dim NomFichierZIP As String = System.IO.Path.GetFileName(_ZIPFile)
                Dim usernametoken_login As String = sunat_ruc & "MODDATOS"
                Dim usernametoken_pwd As String = "MODDATOS"
    
                System.Net.ServicePointManager.UseNagleAlgorithm = True
                System.Net.ServicePointManager.Expect100Continue = False
                System.Net.ServicePointManager.CheckCertificateRevocationList = True
    
                Dim ws As New ServiceBeta.billServiceClient
                Dim Retour As Byte()
    
                Dim data As Byte() = System.IO.File.ReadAllBytes(_ZIPFile)
    
                ws.ClientCredentials.CreateSecurityTokenManager()
                ws.ClientCredentials.UserName.UserName = usernametoken_login
                ws.ClientCredentials.UserName.Password = usernametoken_pwd
    
                ws.Open()
                'envoi du fichier ZIP à la SUNAT
                Retour = ws.sendBill(NomFichierZIP, data)
                ws.Close()
    
                System.IO.File.WriteAllBytes(ZIPFileResponse, Retour)
    
                Return ""
            Catch ex As Exception
                If ex.Message = "" Then
                    Return "Unknown error encountered"
                Else
                    Return ex.Message
                End If
            End Try
    
        End Function
    
    End Class

    Mon fichier app.config est le suivant :

    <?xml version="1.0"?>
    <configuration>
      <configSections>
      </configSections>
      <system.diagnostics>
        <sources>
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="Information"/>
        </switches>
        <sharedListeners>
          <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter"/>
        </sharedListeners>
      </system.diagnostics>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BillServicePortBinding" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="Transport">
                <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
            <binding name="secured">
              <security mode="TransportWithMessageCredential">
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="https://www.sunat.gob.pe:443/ol-ti-itcpgem-beta/billService"
    			binding="basicHttpBinding" bindingConfiguration="BillServicePortBinding"
    			contract="ServiceBeta.billService" name="BillServicePort" >
            <headers>
              <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <wsse:UsernameToken >
                  <wsse:Username>XXXXXXXXXXXXXXXXXXXMODDATOS</wsse:Username>
                  <wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'>MODDATOS</wsse:Password>
                </wsse:UsernameToken>
              </wsse:Security>
            </headers>
          </endpoint>
        </client>
      </system.serviceModel>
    </configuration>

    Quand je veux tester ma librairie dans un projet sous visual studio, le code suivant :

    Module Module1
    
        Sub Main()
            Dim EnvoiSunat As New SUNATbeta.ServiceSunat
            Dim l_messageRetour As String = ""
    
            With EnvoiSunat
                .sunat_ruc = "20450835600"
                .ZIPFile = "C:\Mes Projets\EnvoiWindev\20450835600-01-FF11-56.zip"
                .ZIPFileResponse = "C:\Mes Projets\EnvoiWindev\sunatResponse.zip"
                l_messageRetour = .SendXMLFile
            End With
    
            If l_messageRetour = "" Then
                MsgBox("ok")
            Else
                MsgBox(l_messageRetour, MsgBoxStyle.Critical)
            End If
    
        End Sub
    
    End Module

    Me renvoie cette erreur :

    Impossible de trouver un élément de point de terminaison par défaut qui fait référence au contrat 'ServiceBeta.billService' dans la section de configuration du client ServiceModel. Ceci peut être dû au fait que le fichier de configuration de votre application est introuvable ou que l'élément de point de terminaison correspondant à ce contrat est introuvable dans l'élément client.

    Je ne vois pas ce qui cloche...

    Merci de me donner un coup de main


    mardi 31 mai 2016 13:11

Toutes les réponses