2012-05-11 32 views
6

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> 
+0

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. –

+0

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

+1

Bạn đã giải quyết được sự cố của mình chưa? –

Trả lời

0

Bạn cần phải sửa chữa wsdl của bạn:

<operation name="getXML"> 
    <soap:operation soapAction="urn:MyWebService#getXML"/> 
    <input> 
    <soap:body use="literal"/> 
    </input> 
    <output> 
    <soap:body use="literal"/> 
    </output> 
</operation> 

</binding> 
1

Bạn phải chỉ cần đi qua bài viết này và bạn sẽ nhận được một bức tranh rõ ràng đối với câu trả lời của bạn

đi đến liên kết sau đây:

php web service to dot net

0

Trong quá khứ tôi đã gặp khó khăn nhận .Net để tiêu thụ các dịch vụ web được tạo bằng wsdl ở định dạng rpc/literal. Thay vào đó, hãy thử chuyển đổi WSDL của bạn thành định dạng tài liệu/chữ và bạn sẽ có nhiều may mắn hơn.

Các vấn đề liên quan