je travaille sur le [MessageContract] pour bien le construire
avec
[MessageContract]
[MessageHeader]
[MessageBodyMember]
Je cherche des exemples de codes pour ce type de services ...
j'en ai déjà trouvé un, mais il n'est pas assez complet en explications me semble t-il
enfin pour mon humble niveau ...
il me semble que je pourrai le compléter avec celui-là : ici, non ?
bonjour
... j'ai complété avec ce que j'ai lu, mais sans doute pas assez :
j'ai à présent le message suivant, non pas à la compilation mais au click sur START, à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part host.Open();
le message :
""{"Le service 'MaSolution.Service1' ne possède aucun point de terminaison d'application (non infrastructure). Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application, qu'aucun élément de service correspondant au nom du service n'a été trouvé dans le fichier de configuration ou qu'aucun point de terminaison n'a été défini dans l'élément de service."}
je m'en vais chercher des infos ...
Avant je te conseille de vivement lire les bases de WCF et ne pas trop se lancer dans les tutos avancés qui expliqueraient les concepts un peu complexe comme les MessageContract etc...
Ton message d'erreur indique qu'il n'arrive pas à trouver la configuration à utiliser pour ton service.
Regarde si le fichier de configuration est bien à la racine de ton exe.
Si oui, alors vérifie qu'il existe bien un élément <service name="MaSolution.Service1" >.
Si oui, alors vérifie que le point de terminaison est correct donc l'élément endpoint. Vérifie que l'adresse, le contrat et le binding sont bien correct.
merci ... ravi de te lire
j'y cours, mais il me semblait déjà avoir fait tout cela.
Il doit s'agir d'une erreur de paramétrage sans doute ...
J'ai prévu une configuration pour le poste qui hébergera la service.
C'est à dire que j'ai une configuration qui n'est pas en rapport avec mon poste de travail présentement. Certains paramètres changeraient alors ...
En fait je travail sur un poste de dév et je test aussi sur le poste de dév.
Du coup, les paramètres de dossiers, par exemples, ne sont pas les bons ...
le reste me semblerait correct.
enfin si c'est cela !
Deux solutions : soit je créé mon arborescence aussi sur mon poste de dév soit je déploie mon application... mais le déploiement peut engendrer d'autres soucis/questions/investigation réseaux ... restons simples
c'est cela, l'adresse :
Elle était vide car en localhost
du coup je mets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <endpoint address ="http://localhost:8018/ " binding="wsHttpBinding" contract="MaSolution.IService1"> <!-- Upon deployment, the following identity element should be removed or replaced to reflect the identity under which the deployed service runs. If removed, WCF will infer an appropriate identity automatically. --> <identity> <dns value="localhost"/> </identity> </endpoint>
1 - Je comprends pouvoir virer la balise Identity
2 - Le port derrière localhost est-il obligatoire
3 - Dans l'adresse il y a souvent (toujours) le nom du service aussi ... est-ce utile dans mon cas ?
Pour faire simple peux-tu nous mettre toute la section <system.serviceModel> du fichier de configuration de l'application dans laquelle tu fais appel à host.open() ?
euh oui, voici :
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 <system.serviceModel> <bindings> <basicHttpBinding> <binding name="ZIPTransfert" messageEncoding="Mtom" transferMode="Streamed" maxBufferSize="334217728" maxBufferPoolSize="52428800" maxReceivedMessageSize="334217728"> <readerQuotas maxArrayLength="100000000"/> <security mode="TransportWithMessageCredential" > <transport clientCredentialType="Basic" /> </security> </binding> </basicHttpBinding> </bindings> <services> <service name="MaSolution.Service1"> <host> <baseAddresses> <add baseAddress = "http://localhost:8732/Design_Time_Addresses/MaSolution/Service1/" /> </baseAddresses> </host> <!-- Service Endpoints --> <!-- Unless fully qualified, address is relative to base address supplied above --> <endpoint address ="http://localhost:8018/ " binding="wsHttpBinding" contract="MaSolution.IService1"> <!-- Upon deployment, the following identity element should be removed or replaced to reflect the identity under which the deployed service runs. If removed, WCF will infer an appropriate identity automatically. --> <identity> <dns value="localhost"/> </identity> </endpoint> <!-- Metadata Endpoints --> <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> <!-- This endpoint does not use a secure binding and should be secured or removed before deployment --> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpGetEnabled="False"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="True" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
Déjà c'est bizarre d'avoir une URI absolu à la fois dans adresse et dans base adresse. Normalement adresse dans endpoint était vide auparavant.
Le seul truc qu'il fallait modifier si c'était l'adresse c'est dans base adresse.
1 - Annule toutes tes modifications faites dans le fichier de configurations
2 - concentre toi uniquement dans l'élément baseAddress si tu dois déployer en mettant la bonne addresse ip.
Si tout ceci ne marche refait tout à zero tu as dû louper un truc ou tout simplement explique nous de façon claire et précise ce que tu as fait pour que cela ne marche pas ou ne marche plus.
D'après ce que je lis, il faut aussi rajouter un fichier App.Config dans le projet hote de la solution, car j'ai cela pour l'instant :
voir fichier attaché
Je remets encore ma question 2 posts avant :
Ta capture montre que là où host.Open() est appelé il n'y a pas de app.config. Tu l'ajoutes ensuite tu copies toute la section system.serviceModel dans ce nouveau fichier ou tout simplement tu copies colle le fichier dans le projet qui héberge ton service.Pour faire simple peux-tu nous mettre toute la section <system.serviceModel> du fichier de configuration de l'application dans laquelle tu fais appel à host.open() ?
Sinon Bonne continuation pour le reste vu qu'on ne se comprend pas trop ou c'est moi qui n'explique pas très bien.
A+
pardon ...
je viens de comprendre, excuses moi
je copie le pavé, ok
j'ai commencé par épurer le App.config :
voilà le new, qui ressemble à celui de base en fait :
(j'ai conservé un double du dernier aussi)
Ensuite, j'ai effectué un copier/coller de App.Config (nouvelle formule) dans le projet host. Du coup j'ai deux fois le même app.Config
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 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="UploadDirectory5" type="E:\monchemin"/> </configSections> <system.web> <compilation debug="true" /> <httpRuntime maxRequestLength="2097151" /> </system.web> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="ZIPTransfert" messageEncoding="Mtom" transferMode="Streamed" maxBufferSize="334217728" maxBufferPoolSize="52428800" maxReceivedMessageSize="334217728"> <readerQuotas maxArrayLength="100000000"/> <security mode="TransportWithMessageCredential" > <transport clientCredentialType="Basic" /> </security> </binding> </basicHttpBinding> </bindings> <services> <service name="MaSolution.Service1"> <host> <baseAddresses> <add baseAddress = "http://localhost:8732/Design_Time_Addresses/MaSolution/Service1/" /> </baseAddresses> </host> <endpoint address ="" binding="wsHttpBinding" contract="MaSolution.IService1"> </endpoint> </service> </services> </system.serviceModel> </configuration>
je teste ...
Le Message est différent :
{"HTTP n'a pas pu inscrire l'URL http://+:8732/Design_Time_Addresses/...tion/Service1/. Une autre application a déjà inscrit cette URL auprès de HTTP.SYS."}
ça marche maintenant
En fait c'est un peu ce que je demandais plus haut : "faut-il un App.cofig dans le projet host ..."
Et le dernier message message d'erreur est dû au fait que le App.Config soit double :
je viens de vider dans le App.config du sevice tout ce qui se rapporte au service, et là ça marche
merci
il me reste juste à voir le contenu des contrats et comment déployer le service maintenant sur le bon PC ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager