【发布时间】:2023-04-04 22:04:01
【问题描述】:
我正在尝试访问网络服务(以下两个文件)。客户端将 ASP.NET/C# 用于其 Web 体系结构。我可以添加 Web 引用,但不知何故我无法为 wsdl 文件生成代理类。目的是使用 server.php 文件中的函数,以便我可以使用 xmlstring 在 ASP.NET 网站上显示数据。任何帮助将不胜感激。非常感谢
server.php 文件。该文件有一个 php 函数,它从 mysql 数据库中提取数据,该函数将数据作为 XML 字符串返回。
<?php
//WEB SERVICE FUNCTION TO EXTRACT DATA FROM CLIENT B INTO XML FORMAT
function getXML()
{
//CONNECT TO THE DATABASE SERVER
$dbserverIP = "xxxxxxx";
$dbusername = "xxxxxxx";
$dbpassword = "xxxxxxx";
$dbconnection = mysql_connect($dbserverIP,$dbusername,$dbpassword)
or die ("The connection to the database server failed.");
//CONNECT TO THE DATABASE
$dbname = "xxxxxxxx";
$dbselectok = mysql_select_db($dbname,$dbconnection)
or die ("The connection to the database failed.");
//QUERY THE DATABASE
$sqlquery = "SELECT * FROM videogames";
$sqlresult = mysql_query($sqlquery,$dbconnection)
or die ("Error in executing the SQL statement");
//CREATE XML STRING
$xmlstring = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
$xmlstring.= "<videogames>";
while ($row = mysql_fetch_array($sqlresult))
{
$xmlstring .= "\t<game>\r\n";
$xmlstring .= "\t\t<gametitle>" .$row["gametitle"]. "</gametitle>\r\n";
$xmlstring .= "\t\t<genre>" .$row["genre"]. "</genre>\r\n";
$xmlstring .= "\t\t<year>" .$row["year"]. "</year>\r\n";
$xmlstring .= "\t\t<platform>" .$row["platform"]. "</platform>\r\n";
$xmlstring .= "\t\t<agerating>" .$row["agerating"]. "</agerating>\r\n";
$xmlstring .= "\t\t<price>" .$row["price"]. "</price>\r\n";
$xmlstring .= "\t</game>\r\n";
}
$xmlstring.= "</videogames>";
//WRITE XML STRING TO EXTERNAL FILE
$filename = "videogames.xml";
$fileaccessmode = "w";
$fptr = fopen($filename,$fileaccessmode);
fwrite($fptr,$xmlstring);
fclose($fptr);
//FREE UP MEMORY
mysql_free_result($sqlresult);
mysql_close($dbconnection);
return $xmlstring;
}
//CODE TO DISABLE THE WSDLE CACHE
ini_set("soap.wsdl_cache_enabled","0");
//DEFINE SOAP SERVER INSTANCE AND RELATED WSDL FILE
//THE service.wsdl FILE IS IN THE SAME FOLDER AS THIS server.php FILE
$server = new SoapServer("service.wsdl");
//ADD FUNCTION TO THE SERVER INSTANCE
$server->addFunction("getXML");
//ACTIVATE THE SOAP HANDLER
$server->handle();
?>
这是链接到 server.php 文件的 WSDL 文件。
<?xml version ='1.0' encoding ='UTF-8' ?>
<!-- ====================== DEFINITIONS ====================== -->
<definitions name="MyWebService"
targetNamespace="http://cet-apache-04.cet.bolton.ac.uk/student/mib1bee/CST3017/assignment/scenario1/service.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://cet-apache-04.cet.bolton.ac.uk/student/mib1bee/CST3017/assignment/scenario1/service.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- ====================== TYPES ============================ -->
<!-- No need for type definitions as only xsd built-in ======= -->
<!-- data types are used -->
<!-- ========================================================= -->
<!-- ====================== MESSAGE ========================== -->
<message name="getXML_Request">
<part name="input" />
</message>
<message name="getXML_Response">
<part name="xmlString" type="xsd:string"/>
</message>
<!-- ====================== PORT TYPE ============================ -->
<portType name="myWebService_PortType">
<operation name="getXML">
<input message="tns:getXML_Request"/>
<output message="tns:getXML_Response"/>
</operation>
</portType>
<!-- ======================= BINDING ============================= -->
<binding name="myWebService_Binding" type="tns:myWebService_PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getXML">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<!-- ======================= SERVICE ============================= -->
<service name="myWebService_Service">
<port name="myWebService_Port" binding="tns:myWebService_Binding">
<soap:address location="http://cet-apache-04.cet.bolton.ac.uk/student/mib1bee/CST3017/assignment/scenario1/server.php"/>
</port>
</service>
</definitions>
【问题讨论】:
-
可能是因为我不是 PHP-soap 服务器方面的专家,但我想知道您的 XML 在哪里转换为带有非常特定的肥皂标签的肥皂消息。您的 WSDL 正在声明一个肥皂服务,但您的响应似乎是一个普通的 XML。
-
这么理解对吧,客户端是C#,服务端是PHP?或者是周围的其他方式?如果您尝试为 C# 客户端生成代理类,这样做会出现什么错误?
-
在您的应用程序中创建客户端时提供代码
-
我还没有解决这个问题。我已经创建了 Web 服务(简单的 hello world 字符串),唯一的问题是当 ASP.NET/C# 客户端尝试使用 Web 服务时,由于某种原因,返回值始终为 null。
-
您检查过服务器返回的 XML 代码吗?需要在getXML函数里面写XML头吗?
标签: php asp.net mysql soap wsdl