WCF istemci proxy ilgilenmedikleri döndü SABUN zarf

2 Cevap php

Ben bir boolean veri türü ile basit bir sabun zarf döndüren bir RPC kodlanmış PHP webservice var. Istemci tarafında iz yaparken bu WCF vekil geçmeden önce, sabun zarf bu hakkı gibi görünüyor:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns1="http://sample.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org
/soap/encoding/">
  <SOAP-ENV:Body>
    <ns1:ServiceMessageResponse>
       <outgoingVar1>true</outgoingVar1>
    </ns1:ServiceMessageResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Döndürülen değer proxy diğer tarafa gelince Ancak, bu false değiştirilmiş. Type = "xsd: boolean" Ben bir xsi ekleyerek denedim outgoingVar1, ama yardımcı olmuyor. Sabun zarf kendisi müşteri bekliyor gerektiğini tam olarak ne olduğunu, ama nedense doğru tüketmek olmaz. Bu PHP web hizmeti kurmak yolu ile ilgisi vardır ya da WCF vekaleten bir şeydir? PHP web hizmeti sadece bu gibi ayarlanır:

ini_set('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
$soapServer = new SoapServer('wsdl/sample.wsdl', array('soap_version' => SOAP_1_1));
$soapServer->addFunction('Service');
$soapServer->handle();

ve işlev basit biter 'gerçek getiri;' hattı. Burada hiçbir şey karmaşık. Herhangi bir fikir sorun ne olabilir?

Açıklamalı WSDL (önemsiz ad kaldırıldı ve gerçek olanları modifiye) Bu gibi görünüyor:

<wsdl:definitions name="IJLSoapResponse" targetNamespace="http://casey.com"
tns="http://casey.com" xmlns:samp="http://sample.com" ...>
  <wsdl:types>
    <xsd:schema targetNamespace="http://casey.com" ...>
            <xsd:element name="incomingVar1" type="xsd:string" nillable="true"/>
            <xsd:element name="incomingVar2" type="xsd:string" nillable="true"/>
    </xsd:schema>
    <xsd:schema targetNamespace="http://sample.com" ...>
            <xsd:element name="outgoingVar1" type="xsd:boolean" nillable="true"/>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="ServiceInput">
    <wsdl:part name="incomingVar1" element="tns:incomingVar1"/>
    <wsdl:part name="incomingVar2" element="tns:incomingVar2"/>
  </wsdl:message>
  <wsdl:message name="ServiceOutput">
    <wsdl:part name="outgoingVar1" element="samp:outgoingVar1"/>
  </wsdl:message>
  <wsdl:portType name="ServicePortType">
    <wsdl:operation name="ServiceMessage" parameterOrder="incomingVar1 incomingVar2">
            <wsdl:input name="ServiceMessageRequest" message="tns:ServiceInput"/>
            <wsdl:output name="ServiceMessageResponse" message="tns:ServiceOutput"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="ServiceBinding" type="tns:ServicePortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="ServiceMessage">
            <soap:operation soapAction="http://casey.com/soap/Service"/>
            <wsdl:input name="ServiceMessageRequest">
                    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://casey.com"/>
            </wsdl:input>
            <wsdl:output name="ServiceMessageResponse">
                    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://sample.com"/>
            </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="ServiceService">
    <wsdl:port name="ServicePort" binding="tns:ServiceBinding">
            <soap:address location="http://casey.com/soap/Service"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Bu işler beyan nasıl görmek için yeterli olmalı ... sen açıklık başka bir şeye ihtiyacınız varsa bana bildirin. Yardımlarınız için teşekkürler!

2 Cevap

Çözüm ad alanları ile ilgili sona erdi. Onlar doğru yayılan değil beri, ben elementFormDefault = şemaya "nitelikli" özniteliği eklemek gerekiyordu. Ben yapabilirdiniz tek yolu her eleman, mevcut olmak için önek zorlar. NET mutlu. Bu konuda yardım için teşekkürler.

Biz hizmet WSDL görebilir miyim? Ben outgoingVar1 inç olmak için ne demek olduğunu namespace merak ediyorum

RPC kodlanmış hizmetleri her zaman ad ileti bölümleri Bana bu burada sorun olduğunu görmek için sürpriz olmayacaktır inç olmak içindir hangi çünkü belirsizlik bir acı olmuştur.


Aşağıdaki bağlama SoapUI çalışmak gibi görünüyor. En azından, bir sahte hizmet üretebilir, ve cevap mesaj (örnek ad outgoingVar1) için aradılar ne gibi görünüyor:

<wsdl:binding name="ServiceBinding" type="tns:ServicePortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="ServiceMessage">
        <soap:operation soapAction="http://casey.com/soap/Service"/>
        <wsdl:input name="ServiceMessageRequest">
            <soap:body parts="incomingVar1 incomingVar2" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://casey.com"/>
        </wsdl:input>
        <wsdl:output name="ServiceMessageResponse">
            <soap:body parts="outgoingVar1" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://sample.com"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>