Heim >Backend-Entwicklung >PHP-Tutorial >Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#
Kürzlich muss ich einen Webservice für C# und JAVA zum Aufrufen erstellen. Nach drei Tagen des Suchens und Ausprobierens habe ich ihn endlich erfolgreich unter C# aufgerufen. Um ein Vergessen zu verhindern , ich werde es hier aufzeichnen.
Dieser Artikel bezieht sich auf viele Artikel und Beispiele daraus werden auch im Artikel verwendet.
Das Verzeichnis dieses Artikels ist wie folgt
1. Erstellen Sie einen Webservice mit PHP
2. Erzeugen Sie eine .wsdl-Datei
3. c# PHP-Webservice aufrufen
1. Webservice mit PHP erstellen
1. PHP-Umgebung
Ich verwende Apache von Windows, PHP. Entfernen Sie einfach den Kommentar extension=php_soap.dll in der INI-Datei, sofern php_soap.dll installiert wurde.
Umgebungstest, geben Sie den folgenden Befehl in das cmd-Fenster ein, um zu überprüfen, ob Soap normal ist
c:>php --ini ; Wird verwendet, um zu überprüfen, ob das Soap-Modul in der INI-Datei normal ist normal, es und das, was Sie mit phpinfo() sehen, sind möglicherweise nicht konsistent
c:>php -i |findstr "soap" ;Wird verwendet, um zu sehen, ob das Soap-Modul normal ist
c :>php -r "new SoapClient ('http://localhost/wsdl/person.wsdl');"; Wird verwendet, um Soap direkt auszuführen
2 >
<span>php </span><span>class</span><span> TestWebService { </span><span>public</span><span>function</span><span> HelloWorld() { </span><span>return</span><span>array</span>("HelloWorldResult"=>"welcome to dongzi world"<span>); } </span><span>public</span><span>function</span> GetArray(<span>$args</span><span>) { </span><span>/*</span><span> 注意,Web Service的方法在声明时至多一个参数, 可是在调用该方法时就必须传value1,value2两个参数。 (这一点十分令人费解,我的理解是,在调用该方法时,系统把所有参数都放到一个<strong>对象</strong>里传过来的) </span><span>*/</span><span>$value1</span> = <span>$args</span>-><span>value1; </span><span>$value2</span> = <span>$args</span>->value2;<span>//</span><span>这两句是获取真正的参数 </span><span>$arry</span> = <span>array</span>(<span>$value1</span>,<span>$value2</span><span>); </span><span>//</span><span>返回值也很特别,不是直接返回$arry,而是把它放到一个<strong>对象</strong>里再返回。 </span><span>return</span><span>array</span>("GetArrayResult"=><span>$arry</span><span>); } } </span><span>//</span><span>创建WebSevice实例 </span><span>$server</span> = <span>new</span> SoapServer("TestWebService.wsdl"<span>); </span><span>//</span><span>指定类名 </span><span>$server</span>->setClass("TestWebService"<span>); </span><span>$server</span>-><span>handle(); </span>?>Code anzeigen
2. .wsdl-Datei generieren
Ursprünglich I Ich wollte es einfacher machen und SoapDiscovery.class .php verwenden, aber es traten immer alle möglichen seltsamen Probleme auf; ich musste Zend Studio 12.5 installieren, aber schließlich traten noch andere seltsame Probleme auf, nämlich die Verwendung von vs2010 Generieren Sie es, und es gibt kein Problem beim Aufrufen von C#. 1. Öffnen Sie vs2010, erstellen Sie ein neues Projekt – ASP.NET leere Webanwendung 2. Projekt (Rechtsklick) – Neu Element – Webdienst, der Name wird in TestWebService.asmx geändert, der Code lautet wie folgt:
Code anzeigen
<span>using</span><span> System; </span><span>using</span><span> System.Collections.Generic; </span><span>using</span><span> System.Linq; </span><span>using</span><span> System.Web; </span><span>using</span><span> System.Web.Services; </span><span>namespace</span><span> Web<strong>Application</strong>1 { </span><span>///</span><span><summary></summary></span><span>///</span><span> TestWebService 的摘要说明 </span><span>///</span><span></span> [WebService(Namespace = <span>"</span><span>http://tempuri.org/</span><span>"</span><span>)] [WebServiceBinding(ConformsTo </span>=<span> WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(</span><span>false</span><span>)] </span><span>//</span><span> 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 </span><span>//</span><span> [System.Web.Script.Services.ScriptService]</span><span>public</span><span>class</span><span> TestWebService : System.Web.Services.WebService { [WebMethod] </span><span>public</span><span>string</span><span> HelloWorld() { </span><span>return</span><span>""</span><span>; } [WebMethod] </span><span>public</span><span>string</span>[] GetArray(<span>string</span> a,<span>string</span><span> b) { </span><span>return</span><span>null</span><span>; } } }</span>HelloWorld() und GetArray() sind die Methoden, die wir verfügbar machen möchten. Ich habe sie als leere Methoden geschrieben. 3. Führen Sie F5 aus und kopieren Sie die aktuelle URL-Adresse im Popup-IE-Browser http://localhost:63463/TestWebService.asmx
Öffnen Fügen Sie in einem neuen IE-Browserfenster
ein und drücken Sie dann die Eingabetaste. Zu diesem Zeitpunkt wird im Fenster der XML-Formatinhalt der WSDL-Datei angezeigt:http://localhost:63463 /TestWebService.asmx?wsdl
4 Klicken Sie auf das Menü „Datei speichern unter“, speichern Sie es als TestWebService.wsdl-Datei und legen Sie es im selben Verzeichnis wie TestWebService.php ab. Der Code lautet wie folgt:Code anzeigen
<span></span><span>xml version="1.0" encoding="utf-8"</span><span>?></span><span><span>wsdl:definitions </span><span>xmlns:soap</span><span>="http://schemas.xmlsoap.org/wsdl/soap/"</span><span> xmlns:tm</span><span>="http://microsoft.com/wsdl/mime/textMatching/"</span><span> xmlns:soapenc</span><span>="http://schemas.xmlsoap.org/soap/encoding/"</span><span> xmlns:mime</span><span>="http://schemas.xmlsoap.org/wsdl/mime/"</span><span> xmlns:tns</span><span>="http://tempuri.org/"</span><span> xmlns:s</span><span>="http://www.w3.org/2001/XMLSchema"</span><span> xmlns:soap12</span><span>="http://schemas.xmlsoap.org/wsdl/soap12/"</span><span> xmlns:http</span><span>="http://schemas.xmlsoap.org/wsdl/http/"</span><span> targetNamespace</span><span>="http://tempuri.org/"</span><span> xmlns:wsdl</span><span>="http://schemas.xmlsoap.org/wsdl/"</span><span>></span><span><span>wsdl:types</span><span>></span><span><span>s:schema </span><span>elementFormDefault</span><span>="qualified"</span><span> targetNamespace</span><span>="http://tempuri.org/"</span><span>></span><span><span>s:element </span><span>name</span><span>="HelloWorld"</span><span>></span><span><span>s:complexType </span><span>/></span><span></span><span>s:element</span><span>></span><span><span>s:element </span><span>name</span><span>="HelloWorldResponse"</span><span>></span><span><span>s:complexType</span><span>></span><span><span>s:sequence</span><span>></span><span><span>s:element </span><span>minOccurs</span><span>="0"</span><span> maxOccurs</span><span>="1"</span><span> name</span><span>="HelloWorldResult"</span><span> type</span><span>="s:string"</span><span>/></span><span></span><span>s:sequence</span><span>></span><span></span><span>s:complexType</span><span>></span><span></span><span>s:element</span><span>></span><span><span>s:element </span><span>name</span><span>="GetArray"</span><span>></span><span><span>s:complexType</span><span>></span><span><span>s:sequence</span><span>></span><span><span>s:element </span><span>minOccurs</span><span>="0"</span><span> maxOccurs</span><span>="1"</span><span> name</span><span>="a"</span><span> type</span><span>="s:string"</span><span>/></span><span><span>s:element </span><span>minOccurs</span><span>="0"</span><span> maxOccurs</span><span>="1"</span><span> name</span><span>="b"</span><span> type</span><span>="s:string"</span><span>/></span><span></span><span>s:sequence</span><span>></span><span></span><span>s:complexType</span><span>></span><span></span><span>s:element</span><span>></span><span><span>s:element </span><span>name</span><span>="GetArrayResponse"</span><span>></span><span><span>s:complexType</span><span>></span><span><span>s:sequence</span><span>></span><span><span>s:element </span><span>minOccurs</span><span>="0"</span><span> maxOccurs</span><span>="1"</span><span> name</span><span>="GetArrayResult"</span><span> type</span><span>="tns:ArrayOfString"</span><span>/></span><span></span><span>s:sequence</span><span>></span><span></span><span>s:complexType</span><span>></span><span></span><span>s:element</span><span>></span><span><span>s:complexType </span><span>name</span><span>="ArrayOfString"</span><span>></span><span><span>s:sequence</span><span>></span><span><span>s:element </span><span>minOccurs</span><span>="0"</span><span> maxOccurs</span><span>="unbounded"</span><span> name</span><span>="string"</span><span> nillable</span><span>="true"</span><span> type</span><span>="s:string"</span><span>/></span><span></span><span>s:sequence</span><span>></span><span></span><span>s:complexType</span><span>></span><span></span><span>s:schema</span><span>></span><span></span><span>wsdl:types</span><span>></span><span><span>wsdl:message </span><span>name</span><span>="HelloWorldSoapIn"</span><span>></span><span><span>wsdl:part </span><span>name</span><span>="parameters"</span><span> element</span><span>="tns:HelloWorld"</span><span>/></span><span></span><span>wsdl:message</span><span>></span><span><span>wsdl:message </span><span>name</span><span>="HelloWorldSoapOut"</span><span>></span><span><span>wsdl:part </span><span>name</span><span>="parameters"</span><span> element</span><span>="tns:HelloWorldResponse"</span><span>/></span><span></span><span>wsdl:message</span><span>></span><span><span>wsdl:message </span><span>name</span><span>="GetArraySoapIn"</span><span>></span><span><span>wsdl:part </span><span>name</span><span>="parameters"</span><span> element</span><span>="tns:GetArray"</span><span>/></span><span></span><span>wsdl:message</span><span>></span><span><span>wsdl:message </span><span>name</span><span>="GetArraySoapOut"</span><span>></span><span><span>wsdl:part </span><span>name</span><span>="parameters"</span><span> element</span><span>="tns:GetArrayResponse"</span><span>/></span><span></span><span>wsdl:message</span><span>></span><span><span>wsdl:portType </span><span>name</span><span>="TestWebServiceSoap"</span><span>></span><span><span>wsdl:operation </span><span>name</span><span>="HelloWorld"</span><span>></span><span><span>wsdl:input </span><span>message</span><span>="tns:HelloWorldSoapIn"</span><span>/></span><span><span>wsdl:output </span><span>message</span><span>="tns:HelloWorldSoapOut"</span><span>/></span><span></span><span>wsdl:operation</span><span>></span><span><span>wsdl:operation </span><span>name</span><span>="GetArray"</span><span>></span><span><span>wsdl:input </span><span>message</span><span>="tns:GetArraySoapIn"</span><span>/></span><span><span>wsdl:output </span><span>message</span><span>="tns:GetArraySoapOut"</span><span>/></span><span></span><span>wsdl:operation</span><span>></span><span></span><span>wsdl:portType</span><span>></span><span><span>wsdl:binding </span><span>name</span><span>="TestWebServiceSoap"</span><span> type</span><span>="tns:TestWebServiceSoap"</span><span>></span><span><span>soap:binding </span><span>transport</span><span>="http://schemas.xmlsoap.org/soap/http"</span><span>/></span><span><span>wsdl:operation </span><span>name</span><span>="HelloWorld"</span><span>></span><span><span>soap:operation </span><span>soapAction</span><span>="http://tempuri.org/HelloWorld"</span><span> style</span><span>="document"</span><span>/></span><span><span>wsdl:input</span><span>></span><span><span>soap:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:input</span><span>></span><span><span>wsdl:output</span><span>></span><span><span>soap:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:output</span><span>></span><span></span><span>wsdl:operation</span><span>></span><span><span>wsdl:operation </span><span>name</span><span>="GetArray"</span><span>></span><span><span>soap:operation </span><span>soapAction</span><span>="http://tempuri.org/GetArray"</span><span> style</span><span>="document"</span><span>/></span><span><span>wsdl:input</span><span>></span><span><span>soap:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:input</span><span>></span><span><span>wsdl:output</span><span>></span><span><span>soap:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:output</span><span>></span><span></span><span>wsdl:operation</span><span>></span><span></span><span>wsdl:binding</span><span>></span><span><span>wsdl:binding </span><span>name</span><span>="TestWebServiceSoap12"</span><span> type</span><span>="tns:TestWebServiceSoap"</span><span>></span><span><span>soap12:binding </span><span>transport</span><span>="http://schemas.xmlsoap.org/soap/http"</span><span>/></span><span><span>wsdl:operation </span><span>name</span><span>="HelloWorld"</span><span>></span><span><span>soap12:operation </span><span>soapAction</span><span>="http://tempuri.org/HelloWorld"</span><span> style</span><span>="document"</span><span>/></span><span><span>wsdl:input</span><span>></span><span><span>soap12:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:input</span><span>></span><span><span>wsdl:output</span><span>></span><span><span>soap12:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:output</span><span>></span><span></span><span>wsdl:operation</span><span>></span><span><span>wsdl:operation </span><span>name</span><span>="GetArray"</span><span>></span><span><span>soap12:operation </span><span>soapAction</span><span>="http://tempuri.org/GetArray"</span><span> style</span><span>="document"</span><span>/></span><span><span>wsdl:input</span><span>></span><span><span>soap12:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:input</span><span>></span><span><span>wsdl:output</span><span>></span><span><span>soap12:body </span><span>use</span><span>="literal"</span><span>/></span><span></span><span>wsdl:output</span><span>></span><span></span><span>wsdl:operation</span><span>></span><span></span><span>wsdl:binding</span><span>></span><span><span>wsdl:service </span><span>name</span><span>="TestWebService"</span><span>></span><span><span>wsdl:port </span><span>name</span><span>="TestWebServiceSoap"</span><span> binding</span><span>="tns:TestWebServiceSoap"</span><span>></span><span><span>soap:address </span><span>location</span><span>="http://localhost:63463/TestWebService.asmx"</span><span>/></span><span></span><span>wsdl:port</span><span>></span><span></span><span>wsdl:service</span><span>></span><span></span><span>wsdl:definitions</span><span>></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>Geben Sie http://localhost ein :63463/ Ändern Sie TestWebService.asmx in die URL, die Sie später besuchen werden: http://192.168.1.5/wsdl/006/TestWebService.php
3. c#-Aufruf PHP-Webservice
1. Erstellen Sie eine neue Website – ASP.NET-Website
2. LösungRessourcenmanager
– Projekt (Rechtsklick) – Hinzufügen Web-Referenz: Geben Sie die URL ein:http://192.168.1.5/wsdl/006/TestWebService.php?wsdl
Das folgende Fenster wird angezeigt:
Klicken Sie auf [Referenz hinzufügen]
3. Ändern Sie den Default.aspx.cs-Code in:Code anzeigen
<span>using</span><span> System; </span><span>using</span><span> System.Collections.Generic; </span><span>using</span><span> System.Linq; </span><span>using</span><span> System.Web; </span><span>using</span><span> System.Web.UI; </span><span>using</span><span> System.Web.UI.WebControls; </span><span>public</span><span>partial</span><span>class</span><span> _Default : System.Web.UI.Page { </span><span>protected</span><span>void</span> Page_Load(<span>object</span><span> sender, EventArgs e) { </span><span>//</span><span>初始化WebService </span> WebReference.TestWebService srv = <span>new</span><span> WebReference.TestWebService(); </span><span>//</span><span>调第一个方法 </span><span>string</span> str =<span> srv.HelloWorld(); </span><span>//</span><span>调第二个方法 </span><span>string</span>[] arry = srv.GetArray(<span>"</span><span>string1</span><span>"</span>, <span>"</span><span>string2</span><span>"</span><span>); Response.Write(str); } }</span>4. Führen Sie STRG F5 aus und sehen Sie, wie oben „Willkommen in der Dongzi-Welt“ angezeigt wird, was auf einen erfolgreichen Anruf hinweist!
Das Obige stellt ein reales Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C# vor, einschließlich des relevanten Inhalts. Ich hoffe, dass es für Freunde, die an PHP-Tutorials interessiert sind, hilfreich sein wird.