can,t在WinC窗体中使用php soapserver
我有一个简单的php soapserver,我还为它创建了一个wsdl文件。我可以在php中使用它,但我也想在.net winform中使用它。我搜索了它,但建议的文章都没有用。你能帮我吗? 这是我的soapserver,页面名为testserver.php:can,t在WinC窗体中使用php soapserver,php,wsdl,soapserver,Php,Wsdl,Soapserver,我有一个简单的php soapserver,我还为它创建了一个wsdl文件。我可以在php中使用它,但我也想在.net winform中使用它。我搜索了它,但建议的文章都没有用。你能帮我吗? 这是我的soapserver,页面名为testserver.php: class TestClass { function hello($someone) { return "Hello " . $someone . " Welcome To Wsdl World!";
class TestClass
{
function hello($someone)
{
return "Hello " . $someone . " Welcome To Wsdl World!";
}
function SumData($a,$b)
{
//return "this is test";
return $a+$b;
}
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("http://localhost/webservices/simple/test1.wsdl",array('soap_version' => SOAP_1_2));
$server->setClass('TestClass');
$server->handle();
?>
这是我的wsdl文件,文件名是test1.wsdl:
<?xml version="1.0"?>
<wsdl:definitions name="MyDefinition"
targetNamespace="urn:myTargetNamespace"
xmlns:tns="urn:myTns"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns="http://schemas.xmlsoap.org/wsdl/" >
<wsdl:message name="sumincoming">
<wsdl:part name="reqParam1" type="xsd:int"/>
<wsdl:part name="reqParam2" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="sumoutgoing">
<wsdl:part name="resParam" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="helloincoming">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="hellooutgoing">
<wsdl:part name="response" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="MyPortType">
<wsdl:operation name="SumData">
<wsdl:input message="tns:sumincoming"/>
<wsdl:output message="tns:sumoutgoing"/>
</wsdl:operation>
<wsdl:operation name="hello">
<wsdl:input message="tns:helloincoming"/>
<wsdl:output message="tns:hellooutgoing"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyBinding" type="tns:MyPortType">
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SumData">
<soap12:operation soapAction=""/>
<wsdl:input>
<soap12:body use="literal" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="hello">
<soap12:operation soapAction=""/>
<wsdl:input>
<soap12:body use="literal" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyService">
<!--<documentation>Returns a greeting string.</documentation>-->
<wsdl:port name="MyPort" binding="tns:MyBinding">
<soap12:address location="http://localhost/webservices/simple/testserver.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definition>
提前谢谢 在visual studio中,如果右键单击项目并选择添加->服务引用。。。将wsdl地址放在地址字段中,VisualStudio应该创建用于调用php soap服务器的对象 基于该示例的wsdl地址为
http://localhost/webservices/simple/test1.wsdl
Visual studio将显示服务列表:
MyPortType
MyService
在“我的端口类型”下,应列出两个操作
SumData
hello
您的wsdl文件需要进行一些更正
您需要定义wsdl名称空间
xmlns:wsdl=http://schemas.xmlsoap.org/wsdl/
targetNamespace需要匹配与xmlns:tns相同的值
下面是更正的wsdl文件
<?xml version="1.0"?>
<wsdl:definitions targetNamespace="urn:myTns"
xmlns:tns="urn:myTns"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<wsdl:message name="sumincoming">
<wsdl:part name="reqParam1" type="xsd:int"/>
<wsdl:part name="reqParam2" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="sumoutgoing">
<wsdl:part name="resParam" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="helloincoming">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="hellooutgoing">
<wsdl:part name="response" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="MyPortType">
<wsdl:operation name="SumData">
<wsdl:input message="tns:sumincoming"/>
<wsdl:output message="tns:sumoutgoing"/>
</wsdl:operation>
<wsdl:operation name="hello">
<wsdl:input message="tns:helloincoming"/>
<wsdl:output message="tns:hellooutgoing"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyBinding" type="tns:MyPortType">
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SumData">
<soap12:operation soapAction=""/>
<wsdl:input>
<soap12:body use="literal" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="hello">
<soap12:operation soapAction=""/>
<wsdl:input>
<soap12:body use="literal" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyService">
<!--<documentation>Returns a greeting string.</documentation>-->
<wsdl:port name="MyPort" binding="tns:MyBinding">
<soap12:address location="http://localhost/webservices/simple/testserver.php"/>
</wsdl:port>
</wsdl:service>
我试过了,但无法调用该函数。请发送或上传一个示例源,好吗!?我对您提供的wsdl文件有问题,正在尝试研究它。非常感谢我的朋友。它工作得非常好。
class Program
{
static void Main(string[] args)
{
PHPSoapClient.MyPortTypeClient client = new PHPSoapClient.MyPortTypeClient();
Console.WriteLine(client.SumData(1, 2));
Console.Read();
}
}