Faire appel à un web service dans une librairie .NET
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 : 20450835600MODDATOS
mot de passe : MODDATOS
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 :
Code:
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
| 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 :
Code:
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
| <?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 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 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 :
Citation:
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
Ps:
1) le web service utilisé est juste un web service test, il vérifie juste si le fichier qu'on envoie peut être validé ou pas si je dois l'envoyer en production
2) le web service étant de type test, tous les utilisateurs ont le même mot de passe, seul la partie numérique dans le nom utilisateur change