Heim >Backend-Entwicklung >PHP-Tutorial >Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

WBOY
WBOYOriginal
2016-07-29 09:15:11934Durchsuche

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

Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

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 >

Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

<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:

Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

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:

Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

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ösung

Ressourcenmanager

– 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]Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

3. Ändern Sie den Default.aspx.cs-Code in:

Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

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. Ein echtes Beispiel für die Erstellung eines Webservices in PHP und dessen Aufruf über C#

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn