Bonjour,
N'ayant pas eu de réponse du coter Perl, je viens tenter ma chance ici ... Car je pense que l'erreur est au niveau WCF mais pas sure ...
Que je m'explique, j'ai un webservice en WCF que j'essaie d'interroger avec un client Perl mais je n'y arrive pas. Ne trouvant pas de solution je vous ai poster le code que j'utilise peut être que quelqu'un aura une piste ...
Code client Perl:
Contrat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #! c:\perl\bin\perl use strict; use warnings; use SOAP::Lite +trace => [qw(all)]; #use SOAP::Lite; print my $service = SOAP::Lite -> uri('http://192.168.123.105:4242/TestWcfForPerl/') -> proxy('http://192.168.123.105:4242/TestWcfForPerl/') -> on_action(sub{sprintf '%sIServiceTest/%s', @_}) -> HelloWorld()->result;
Service :
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace Contracts { [ServiceContract] //[DataContractFormat(Style = OperationFormatStyle.Rpc)] public interface IServiceTest { [OperationContract] string HelloWorld(); } }
Hebergeur de services :
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Contracts; namespace Services { public class ServiceTest : IServiceTest { public string HelloWorld() { return "Hello world !!"; } } }
Fichier de configuration du serveur :
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using Contracts; using Services; namespace Hebergeur { class Program { static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(ServiceTest)); try { host.Open(); Console.WriteLine("Service demarre ..."); Console.ReadLine(); host.Close(); } catch (Exception e) { Console.WriteLine(e.Message); Console.ReadLine(); } } } }
Coter debug :
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 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="MyBasicHttpBinding" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="false" > <security mode="None" /> </binding> </basicHttpBinding> </bindings> <services> <service name="Services.ServiceTest"> <endpoint address="http://localhost:4242/TestWcfForPerl/" binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding" contract="Contracts.IServiceTest" /> </service> </services> </system.serviceModel> </configuration>
Merci par avance !!
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 SOAP::Transport::new: () SOAP::Serializer::new: () SOAP::Deserializer::new: () SOAP::Parser::new: () SOAP::Lite::new: () SOAP::Transport::HTTP::Client::new: () SOAP::Lite::call: () SOAP::Serializer::envelope: () SOAP::Serializer::envelope: HelloWorld SOAP::Data::new: () SOAP::Data::new: () SOAP::Data::new: () SOAP::Data::new: () SOAP::Transport::HTTP::Client::send_receive: HTTP::Request=HASH(0x1c7eaa4) SOAP::Transport::HTTP::Client::send_receive: POST http://192.168.123.105:4242/Te stWcfForPerl/ HTTP/1.1 Accept: text/xml Accept: multipart/* Accept: application/soap Content-Length: 448 Content-Type: text/xml; charset=utf-8 SOAPAction: http://192.168.123.105:4242/TestWcfForPerl/IServiceTest/HelloWorld <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.or g/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encodi ng/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://sch emas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/env elope/"><soap:Body><HelloWorld xmlns="http://192.168.123.105:4242/TestWcfForPerl /" xsi:nil="true" /></soap:Body></soap:Envelope> SOAP::Transport::HTTP::Client::send_receive: HTTP::Response=HASH(0x303f79c) SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal Server Error Date: Tue, 17 Feb 2009 22:55:38 GMT Server: Microsoft-HTTPAPI/1.0 Content-Length: 764 Content-Type: text/xml; charset=utf-8 Client-Date: Tue, 17 Feb 2009 22:55:38 GMT Client-Peer: 192.168.123.105:4242 Client-Response-Num: 1 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault ><faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a: ActionNotSupported</faultcode><faultstring xml:lang="en-US">The message with Act ion 'http://192.168.123.105:4242/TestWcfForPerl/IServiceTest/HelloWorld' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDi spatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender a nd the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</ faultstring></s:Fault></s:Body></s:Envelope> SOAP::Deserializer::deserialize: () SOAP::Parser::decode: () SOAP::SOM::new: () Use of uninitialized value $service in print at C:\bataille\web_service\c#\clien t\cli_c#.pl line 11. SOAP::SOM::DESTROY: () SOAP::Lite::DESTROY: () SOAP::Transport::DESTROY: () SOAP::Transport::HTTP::Client::DESTROY: () SOAP::Deserializer::DESTROY: () SOAP::Parser::DESTROY: () SOAP::Serializer::DESTROY: () SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () SOAP::Data::DESTROY: ()
Partager