Web Service WCF client Perl
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:
Code:
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; |
Contrat :
Code:
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();
}
} |
Service :
Code:
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 !!";
}
}
} |
Hebergeur de services :
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
|
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();
}
}
}
} |
Fichier de configuration du serveur :
Code:
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> |
Coter debug :
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
|
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: () |
Merci par avance !!