[php soap client -> wcf soap server] > verbinden lukt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer te verbinden met een soap-server die op windows draait, via wsdl

De gehele documentatie is enkel een API, geschreven voor C# in Visual studio.... terwijl ik in PHP wil verbinden met de soap server. Daar heb ik dus niet zo veel aan.

Het verbinden lukt niet standaard; enkel als ik soap_version=>SOAP_1_2 meegeef, anders krijg ik;

code:
1
2
3
HTTP/1.1 415 Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET


Goed, het is Soap 2. Dat is niet het probleem; het probleem is dat zodra ik een call maak naar een soap-functie, de verbinding wegvalt!

code:
1
SoapClient::__doRequest() [function.SoapClient---doRequest]: SSL: Verbinding is weggevallen


Als ik deze error onderdruk, krijg ik de exception: Error Fetching http headers.
Ik krijg ook een lege respons terug.

Heeft iemand nu al enig idee wat dit kan zijn, of hebben jullie daarvoor meer informatie nodig?

Ik wil het ook gaan proberen met NuSoap, maar denken jullie dat dat helpt?

[ Voor 15% gewijzigd door Verwijderd op 07-03-2010 22:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
n e one?

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Zo te zien valt er wel meer weg dan alleen de verbinding ;)
Verwijderd schreef op vrijdag 05 maart 2010 @ 10:54:
[...]
Heeft iemand nu al enig idee wat dit kan zijn, of hebben jullie daarvoor meer informatie nodig?
Dat lijkt me een redelijk understatement als er niemand reageert. Heb je meer info om het helpen aantrekkelijker te maken? Voorbeeld code doet het altijd goed. Ook aangeven wat je zelf al geprobeerd hebt werkt inspirerend.
Ik wil het ook gaan proberen met NuSoap, maar denken jullie dat dat helpt?
Wat is hieruit gekomen? Al geprobeerd?

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Uit je 2de stukje maar ik op dat je verbind over HTTPS, maar die noem je verder nergens. Lijkt me nogal relevant.

Probeer eens met curl of openssl een request in te sturen, dan krijg je misschien iets meer gegevens over waarom de verbinding wegvalt.
Mogelijk heb je niet het juiste certificaat, en weigert de server je request te behandelen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het met NuSoap geprobeerd, maar krijgt dan hetzelfde resultaat..

Dit is mijn code (heb wat woorden veranderd ivm werkgever)

PHP:
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php

    $gos = new GOTOrderService
    ( 
        'https://testwebservices.mijnGOT.nl/v2/GOTOrderService.svc?wsdl',
        array
        (
            'soap_version'  => SOAP_1_2,
            'trace' => 1,
            'exceptions' => 1
        ) 
    );
    
    try
    {
        $ofd    = new GetOrderFormData();
        $ofd->securityContext = new SecurityContext();
        $a = /*@*/$gos->GetOrderFormData($ofd);
    } 
    catch (Exception $e) 
    {
        echo 'LastRequestHeaders:<pre>'.        htmlentities($gos->__getLastRequestHeaders()).  '</pre>';
        echo 'LastRequest:<pre>'.               htmlentities($gos->__getLastRequest()).         '</pre>';
        echo 'LastResponseHeaders:<pre>'.   htmlentities($gos->__getLastResponseHeaders()). '</pre>';
        echo 'LastResponse:<pre>'.              htmlentities($gos->__getLastResponse()).            '</pre>';
        echo 'Caught exception:<pre>'.          $e->getMessage().                                           '</pre>';
        exit;
    }
    
    class SecurityContext
    {
        public $CompanyName = '1';  
        public $DealerName  = '2';
        public $UserName        = 'a';
        public $PassWord        = 'b!';
    }
    
    class GOTOrderService extends SoapClient 
    {
        private static $classmap = array
        (
            'SecurityContext'       => 'SecurityContext',
            'OrderFormData'             => 'OrderFormData',
            'OrderFormProperty'         => 'OrderFormProperty',
            'EnumEntity'                => 'EnumEntity',
            'MainBundleType'            => 'MainBundleType',
            'BaseBundleType'            => 'BaseBundleType',
            'AdditionalBundleType'  => 'AdditionalBundleType',
            'Promotion'                 => 'Promotion',
            'Result'                    => 'Result',
            'ResultDetail'          => 'ResultDetail',
            'OrderData'                 => 'OrderData',
            'GetOrderFormData'      => 'GetOrderFormData',
            'GetOrderFormDataResponse' => 'GetOrderFormDataResponse',
            'SubmitOrder'               => 'SubmitOrder',
            'SubmitOrderResponse'   => 'SubmitOrderResponse',
            'GetOrderState'         => 'GetOrderState',
            'GetOrderStateResponse' => 'GetOrderStateResponse',
            'char'                      => 'char',
            'duration'                  => 'duration',
            'guid'                      => 'guid',
        );

        public function __construct($wsdl = "https://testwebservices.mijnGOT.nl/V2/GOTOrderService.svc?wsdl", $options = array()) 
        {
            foreach(self::$classmap as $key => $value) 
            {
                if(!isset($options['classmap'][$key])) 
                {
                    $options['classmap'][$key] = $value;
                }
            }
            parent::__construct($wsdl, $options);
        }


        public function GetOrderFormData(GetOrderFormData $parameters) 
        {
            return $this->__soapCall(
                'GetOrderFormData',
                array($parameters),       
                array
                (
                    'uri' => 'http://tempuri.org/',
                    'soapaction' => ''
                )
            );
        }

        public function SubmitOrder(SubmitOrder $parameters) 
        {
            return $this->__soapCall
            (
                'SubmitOrder', 
                array($parameters),       
                array
                (
                    'uri' => 'http://tempuri.org/',
                    'soapaction' => ''
                )
            );
        }

        public function GetOrderState(GetOrderState $parameters) 
        {
            return $this->__soapCall
            (
                'GetOrderState', 
                array($parameters),      
                array
                (
                    'uri' => 'http://tempuri.org/',
                    'soapaction' => ''
                )
            );
        }
    }
    class GetOrderFormData 
    {
        public $securityContext; // SecurityContext
    }

?>

[ Voor 28% gewijzigd door Verwijderd op 10-03-2010 14:48 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Heb je al met SoapUI geprobeerd of je zonder programmeerwerk wel met de WS kunt praten? Probeer het ook eens gewoon over HTTP i.p.v. HTTPS?

[ Voor 23% gewijzigd door Hydra op 10-03-2010 14:56 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hydra schreef op woensdag 10 maart 2010 @ 14:55:
Heb je al met SoapUI geprobeerd of je zonder programmeerwerk wel met de WS kunt praten? Probeer het ook eens gewoon over HTTP i.p.v. HTTPS?
Dat ga ik even proberen met SoapUI, thanks.
Ik moet over HTTPS, volgens de externe partij (die te weinig tijd heeft voor support in PHP, zij doen C#).

[ Voor 8% gewijzigd door Verwijderd op 10-03-2010 15:05 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Verwijderd schreef op woensdag 10 maart 2010 @ 15:05:
Dat ga ik even proberen met SoapUI, thanks.
Ik moet over HTTPS, volgens de externe partij (die te weinig tijd heeft voor support in PHP, zij doen C#).
"Oeh we moeten ons werk doen". Pff. Een webservice zou moeten voldoen aan de standaarden. Als deze dat niet doet (wat helaas in het geval van iets oudere .net versies wel eens het geval wou zijn) is dat geen kwestie van dat het "PHP" is maar dat hun implementatie gewoon brak is. Een WS is open en de client taal zou daar geen invloed op moeten hebben.

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hydra schreef op woensdag 10 maart 2010 @ 15:09:
[...]


"Oeh we moeten ons werk doen". Pff. Een webservice zou moeten voldoen aan de standaarden. Als deze dat niet doet (wat helaas in het geval van iets oudere .net versies wel eens het geval wou zijn) is dat geen kwestie van dat het "PHP" is maar dat hun implementatie gewoon brak is. Een WS is open en de client taal zou daar geen invloed op moeten hebben.
Mjah, het is de vraag of het aan hun ligt.
Het lukt met soapUI. Maar het lukte ook met de WSDL interpreter die ik gebruikt heb.

Verder communiceren dan de wsdl opvragen lijkt niet te gaan, heb het ook nog eens met een andere server geprobeerd, iets ander resultaat (php 5.3.0 ipv 5.2.4):
Warning: SoapClient::__doRequest() [soapclient.--dorequest]: SSL: De bewerking is voltooid.

[edit]

Met SoapUI probeer ik nu GetOrderFormData met de juiste credentials.

Dit krijg ik terug:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
   <s:Header>
      <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
   </s:Header>
   <s:Body>
      <s:Fault>
         <s:Code>
            <s:Value>s:Sender</s:Value>
            <s:Subcode>
               <s:Value>a:DestinationUnreachable</s:Value>
            </s:Subcode>
         </s:Code>
         <s:Reason>
            <s:Text xml:lang="nl-NL">The message with To '' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher.  Check that the sender and receiver's EndpointAddresses agree.</s:Text>
         </s:Reason>
      </s:Fault>
   </s:Body>
</s:Envelope>

[ Voor 35% gewijzigd door Verwijderd op 10-03-2010 15:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is nu gelukt om te verbinden met soapui
Of dat goed of slecht is mogen jullie zeggen, ik moet het in PHP maken, en het werkt pas zodra ik
"Enable WS-Reliable Messaging" aanzet!

[edit]
Na even Googelen lijkt het mij dat het enkel mogelijk is met WSO2, of zit ik ernaast?
http://wso2.org/project/wsf/php/2.0.0/docs/index.html

Ik ga de PHP extensie proberen te installeren... wish me luck.

[edit]

Dat gaat niet lukken, op de productieserver draait Zend Core. Daar zit geen phpize in wat weer nodig is om wso2 te compileren en ga zo door.... server reinstall voor een applicatie.. pff.

Ik hoop echt dat iemand nog een betere oplossing heeft.

8)7 dazzled

[ Voor 75% gewijzigd door Verwijderd op 10-03-2010 16:35 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ga nu een virtualbox server installeren, en het daarop proberen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed. De server draait perfect. WSO2 WSF/PHP erop geknald.
Krijg ik nog steeds geen respons van de soap server :S

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Reageer dan eens op alle vragen die hier worden gesteld, zoals de mijne.
Zo komen we nergens.
frickY schreef op zondag 07 maart 2010 @ 23:08:
Uit je 2de stukje maar ik op dat je verbind over HTTPS, maar die noem je verder nergens. Lijkt me nogal relevant.

Probeer eens met curl of openssl een request in te sturen, dan krijg je misschien iets meer gegevens over waarom de verbinding wegvalt.
Mogelijk heb je niet het juiste certificaat, en weigert de server je request te behandelen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
frickY schreef op zaterdag 13 maart 2010 @ 13:55:
Reageer dan eens op alle vragen die hier worden gesteld, zoals de mijne.
Zo komen we nergens.


[...]
De (test)server maakt geen gebruik van certificaten. Bij verbinden met de server met SoapUI gaat het allemaal prima. Het zit hem dus in het PHP gedeelte.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nog wat informatie...

RAW request met SoapUI (succesvol):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:asp="http://schemas.datacontract.org/2004/07/dataTransferObject">
   <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://tempuri.org/IxxxOrderService/GetOrderFormData</wsa:Action><wsa:MessageID>uuid:0a343b8d-73a2-4c9c-be31-9052e371c7c6</wsa:MessageID><wsa:To>https://testwebservices.xxx.nl/V2/xxxOrderService.svc</wsa:To></soap:Header>
   <soap:Body>
      <tem:GetOrderFormData>
         <!--Optional:-->
         <tem:securityContext>
            <!--Optional:-->
            <asp:CompanyName>x</asp:CompanyName>
            <!--Optional:-->
            <asp:DealerName>x</asp:DealerName>
            <!--Optional:-->
            <asp:UserName>x</asp:UserName>
            <!--Optional:-->
            <asp:Password>x!</asp:Password>
         </tem:securityContext>
      </tem:GetOrderFormData>
   </soap:Body>
</soap:Envelope>

Hoe kan ik dit in PHP voor elkaar krijgen adh. van de WSDL?

RAW request met native SoapClient en PHP 5.2.4 (faalt):
code:
1
2
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://schemas.datacontract.org/2004/07/xxx.Product.DataTransferObject" xmlns:ns2="http://tempuri.org/"><env:Body><ns2:GetOrderFormData><ns2:securityContext><ns1:CompanyName>ghjghjghj</ns1:CompanyName><ns1:DealerName>jhkhjk</ns1:DealerName><ns1:UserName>Developer</ns1:UserName></ns2:securityContext></ns2:GetOrderFormData></env:Body></env:Envelope>



Waarmee kan ik nu WS-A gebruiken in PHP?

[ Voor 9% gewijzigd door Verwijderd op 29-04-2010 23:54 ]

Pagina: 1