简体   繁体   English

消耗来自C#的php soap服务

[英]consume a php soap service from C#

I have made a simple web service 我做了一个简单的网络服务

wsdl: 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:message> 
 <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();

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();

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: 我可以从php客户端访问:

$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 我试图创建一个C#客户端,所以首先创建了一个服务引用“ mysum”,然后在表单上添加了一个按钮和一个标签,并为该按钮添加了以下代码

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

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 谢谢高级约翰

I think your problem is that you are adding the service as a service reference instead of web service reference. 我认为您的问题是您将服务添加为服务参考,而不是Web服务参考。

To add a web service reference 添加Web服务参考

  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. 确保在项目中添加了System.Web.Services命名空间引用。

Hope it helps. 希望能帮助到你。

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 通常,您可以通过右键单击有问题的对象(在本例中为mysum),然后查看是否可以使用指令来确定是否可以使用指令解决问题。 ' where '在哪里 is the name of your directive. 是指令的名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM