开发者

consume a php soap service from C#

开发者 https://www.devze.com 2023-01-21 03:08 出处:网络
I have made a simple web service wsdl: <wsdl:definitions name=\'mysum\' > <wsdl:types> <xsd:schema

I have made a simple web service

wsdl:

<wsdl:definitions name='mysum' >

<wsdl:types>
 <xsd:schema 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:tns="http://www.my-uni-project.info/joomla/components/com_jv_vm_soa/"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="mysum"
   targetNamespace="http://www.my-uni-project.info/joomla/components/com_jv_vm_soa/"
   xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">

   <xsd:complexType name="mysumRequest">
    <xsd:all>
     <xsd:element minOccurs="0" name="n1" type="xsd:int"/>
     <xsd:element minOccurs="0" name="n2" type="xsd:int"/>
    </xsd:all>
   </xsd:complexType>   

   <xsd:element name="mysumResponse" type="xsd:int"/>
  </xsd:schema>
 </wsdl:types>

 <wsdl:message name="mysumRequest">
   <wsdl:part name="parameters" element="tns:mysumRequest" />
 </wsdl:messa开发者_JS百科ge> 
 <wsdl:message name="mysumResponse">
   <wsdl:part name="result" element="tns:mysumResponse" />
 </wsdl:message> 


 <wsdl:portType name="mysum">
  <wsdl:operation name="mysum">
   <wsdl:input message="tns:mysumRequest"/>
   <wsdl:output message="tns:mysumResponse"/>
  </wsdl:operation>
 </wsdl:portType> 

 <wsdl:binding name="mysumSOAP" type="tns:mysum">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
  <wsdl:operation name="mysum">
   <soap:operation soapAction="mysum" />
   <wsdl:input>
    <soap:body use="literal" />
   </wsdl:input>
   <wsdl:output>
    <soap:body use="literal" />
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding> 

 <wsdl:service name="mysum">
  <wsdl:port name="mysumSOAP" binding="tns:mysumSOAP">
    <soap:address location="http://www.my-uni-
    project.info/joomla/components/com_jv_vm_soa/mysum.php" />
  </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

the service:

function mysum($parameters) {

$result = $parameters->item[0]->value + $parameters->item[1]->value; return $result ; }

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache $server = new SoapServer("mysum.wsdl"); $server->addFunction("mysum"); $server->handle();

that I can access from a php client:

$client = new SoapClient("http://www.my-uni- project.info/joomla/components/com_jv_vm_soa/mysum.wsdl"); $params = array('n1' => '4', 'n2' => '8');

try { 
  $result = $client->__soapCall('mysum', array('parameters' => $params));

echo $result; } catch (SoapFault $exception) { echo $exception;

}

I tried to create a C# client so first I created a service reference "mysum", then on the form I added a button and a label and I added the following code for the button

 private void button1_Click(object sender, EventArgs e)
    {
        mysum s = new mysum();
        label1.Text = "" + s.mysum(2, 3);                
    }

Whe I run it I get this error:

Error 5 The type or namespace name 'mysum' could not be found (are you 
missing a using directive or an assembly reference?) 

The service is online

Thank you in advanced John


Typically you can determine if you can resolve the problem using a directive by right-clicking on the object in question, in this case mysum, and seeing if you can 'Resolve Using ' where is the name of your directive.


I think your problem is that you are adding the service as a service reference instead of web service reference.

To add a web service reference

  1. Add service reference
  2. Hit the Advanced button on the window
  3. Hit Add Web Reference
  4. Enter the service url

Also,

Make sure you have added the System.Web.Services namespace reference in your project.

Hope it helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消