VS2010 : appel à un web service
Bonjour,
Dans mon projet, je fais appel à un web service, le lien WSDL vers ce dernier est disponible à cette adresse, je l'ai nommé Homologacion.
L'objectif est de pouvoir envoyer un fichier au format XML et de récupérer un fichier XML de type accusé de réception, afin de dire que le fichier envoyé est ok, ce premier se trouve dans un dossier TEMP, que je dois compresser au format ZIP et faire en sorte qu'entre le nom du fichier XML et celui du ZIP, seul l'extension doit changer, de plus, je dois me connecter auprès du WSSE UsernameToken, je vous met ainsi le code que j'ai mis:
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
| Try
'génération du ZIP
Dim adresse As String = "C:\Users\Administrateur.SERVEUR\Desktop\Envoi SUNAT\"
Dim adresseTEMP As String = "C:\Users\Administrateur.SERVEUR\Desktop\Envoi SUNAT\TEMP"
Dim fichier_envoi As String = System.IO.Directory.GetFiles(adresseTEMP)(0)
fichier_envoi = fichier_envoi.Split("\")(fichier_envoi.Split("\").Count() - 1)
Dim nomFichier As String = fichier_envoi.Split(".")(0).Trim
Dim fichier_recu As String = "R-" & fichier_envoi
Dim zip As New ICSharpCode.SharpZipLib.Zip.FastZip
Dim pathToZipFile As String = adresse & nomFichier & ".zip"
If System.IO.File.Exists(pathToZipFile) Then
System.IO.File.Delete(pathToZipFile)
End If
zip.CreateZip(pathToZipFile, adresseTEMP, True, "")
'traitement pour envoyer le fichier
Dim sunat_ruc As String = "xxxx"
Dim sunat_usario As String = "xxxx"
Dim sunat_clave As String = "xxxx"
Dim usernametoken_login As String = sunat_ruc & sunat_usario
Dim usernametoken_pwd As String = sunat_clave
System.Net.ServicePointManager.UseNagleAlgorithm = True
System.Net.ServicePointManager.Expect100Continue = False
System.Net.ServicePointManager.CheckCertificateRevocationList = True
Dim data As Byte() = System.IO.File.ReadAllBytes(pathToZipFile)
Dim ws As New Homologacion.billServiceClient
Dim Retour As Byte()
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(pathToZipFile, data)
ws.Close()
'la réponse
System.IO.File.WriteAllBytes(adresse & fichier_recu, Retour)
MsgBox("Envoi ok")
Catch ex As Exception
MsgBox(ex.ToString)
End Try |
L'erreur que je rencontre se situe en faisant l'instruction suivante:
Code:
Dim ws As New Homologacion.billServiceClient
L'erreur que je récupère est la suivante:
Citation:
System.InvalidOperationException: Impossible de trouver un élément*de point de terminaison par défaut qui fait référence au contrat 'Homologacion.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.
à System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
à System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
à System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
à System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
à System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
à System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
à System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
à System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
à System.ServiceModel.ClientBase`1..ctor()
à ConsoleApplication1.Homologacion.billServiceClient..ctor() dans C:\Users\Administrateur.SERVEUR\Desktop\Envoi SUNAT\envoi_sunat\envoi_sunat\Service References\Homologacion\Reference.vb:ligne 227
à ConsoleApplication1.Module1.Main() dans C:\Users\Administrateur.SERVEUR\Desktop\Envoi SUNAT\envoi_sunat\envoi_sunat\Module1.vb:ligne 39
Je pense que mon erreur vient de mon fichier app.config qui n'est pas configuré correctement, je vous met tel que je l'ai (sans les identifiants pour se connecter au WSSE UsernameToken) :
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
| <?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
<system.diagnostics>
<sources>
<!-- Cette section définit la configuration de l'enregistrement dans le fichier journal de My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Supprimez les marques de commentaire dans la section suivante pour écrire dans le journal des événements de l'application -->
<!--<add name="EventLog"/>-->
</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"/>
<!-- Supprimez les marques de commentaire dans la section suivante et remplacez APPLICATION_NAME par le nom de votre application à écrire dans le journal des événements de l'application -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</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/billService"
binding="basicHttpBinding" bindingConfiguration="BillServicePortBinding"
contract="Production.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>xxxxxx</wsse:Username>
<wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'>xxxxx</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</headers>
</endpoint>
</client>
</system.serviceModel>
</configuration> |
Vous pourriez me dire comment je dois m'y prendre? à vrai dire, je ne comprends pas grand chose dans ce fichier app.config, mis à part que l'on mentionne des paramètres,, afin de faire appel à ce web service.
Merci