Tôi đang cố truy cập một dịch vụ web (hai tệp bên dưới). Máy khách đang sử dụng ASP.NET/C# cho kiến trúc web của họ. Tôi có thể thêm các tài liệu tham khảo web nhưng bằng cách nào đó tôi không thể tạo ra một lớp proxy cho các tập tin wsdl. Mục đích là sử dụng hàm trong tệp tin server.php để tôi có thể sử dụng xmlstring để hiển thị dữ liệu trên trang web ASP.NET. Bất kỳ trợ giúp sẽ được rất đánh giá cao. Nhiều người Cảm ơnASP.NET/C# khách hàng sử dụng dịch vụ web PHP/MYSQL (WSDL)
tệp server.php. Tệp này có hàm php trích xuất dữ liệu từ một db mysql và hàm trả về dữ liệu dưới dạng chuỗi 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();
?>
Đây là tệp WSDL được liên kết với tệp server.php.
<?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>
Có lẽ vì tôi không phải là một chuyên gia trong các máy chủ PHP-xà phòng, nhưng tôi đã tự hỏi nơi XML của bạn được chuyển đổi thành một xà phòng thông báo, với các thẻ xà phòng rất cụ thể của nó. WSDL của bạn tuyên bố một dịch vụ xà phòng, nhưng phản ứng của bạn dường như là một XML đơn giản. –
Vì vậy, để hiểu điều này đúng, khách hàng là C# và máy chủ là PHP? Có còn đường nào khác không? Nếu bạn đang cố gắng tạo một lớp proxy cho một máy khách C#, thì lỗi khi làm như vậy là gì? – valheru
Bạn đã giải quyết được sự cố của mình chưa? –