ホームページ >バックエンド開発 >C#.Net チュートリアル >.NET を使用して PHP Web サービスを呼び出す一般的な例

.NET を使用して PHP Web サービスを呼び出す一般的な例

黄舟
黄舟オリジナル
2016-12-15 13:34:131115ブラウズ

最近のプロジェクトは、「DB2 に直接アクセスする WinForm」から「PHP Web サービスを介して DB2 にアクセスする WinForm」に移植されました。

(利点は、PHP を Linux 上で実行でき、Linux は無料であることです)

この提案の難しさは、DB2 にアクセスするのではなく、.NET が PHP の Web サービスを呼び出すことです。長年 .NET に取り組んできて、Web サービスは .NET でしかできない…と思っていた私にとって、これは非常に難しいです。

しかし、問題はまだ解決する必要があり、期限は目の前にあります。いくつかの調査の結果、ついに手がかりが得られたので、今回はそれを共有します。

まず、PHP サーバーには少なくとも 2 つのファイル (WSDL ファイルと PHP ファイル) が必要です。 WSDL ファイルは、WebService によって提供されるサービスと呼び出しメソッドを記述するために使用される機械可読 XML ファイルです (.NET の場合、呼び出しコードは自動的に生成されるため、非常に使いやすいのが実際の php ファイルです)。ウェブサービス。

1) PHPサーバーサイドコード

1-1) TestWebService.phpコード

以下引用内容:

class TestWebService
{
public function HelloWorld()
{
return array (" HelloWorldResult"=>"Hello"); }

パブリック関数 GetArray($args)メソッドを渡す必要があります。value1 と value2 の 2 つのパラメータがあります。

to;
return array("GetArrayResult"=>$arry);
}
}

//WebSeviceインスタンスを作成
$server = new SoapServer("TestWebService.wsdl");

//クラス名を指定

$server -> ;setClass("TestWebService");

$server->handle();

?>




1-2) TestWebService.wsdl コード

以下は引用内容です:













< /s:要素&gt;
&lt; s:要素名= "getArray"&gt;
&lt; s:complexType&gt;
&lt; s:sequence&gt;
&lt; s:element minoccurs = "0" maxoccurs = "1" name = = " "value1" type="s:string" />



























< ;/wsdl:message>

   






< /wsdl:operation>










































< ;wsdl:サービス名="TestWebService">









WSDL コードは、メソッドが多数ある場合、手でコードを入力するのは不可能です。賢い方法があります。それは、.NET を使用して実際のメソッド本体を使用せずに Web サービスを実装し、次に http://***/TestWebService.asmx? を使用することです。 wsdl メソッドは、wsdl コード ファイルを生成します。

WSDL ファイルに関して、2 つの特別な点を説明したいと思います。

(1) soap:address ノードは WebService が宣言されているアドレスであり、デプロイメント中に対応するアドレスに変更する必要があります

(2) 1 次元配列の宣言型は ArrayOfType、文字列配列は ArrayOfString です。 Type が単純型ではない場合、Type を個別に宣言する必要があります。

2) .NET クライアント コード

まず、Web 参照を追加します。アドレスは WSDL ファイルの Http アドレスです。コードを呼び出します (C#)

以下は参考内容です:

// webService を初期化します

LocalHost.testWebService SRV = New LocalHost.testwebService () ( ;);配列型も一般的に理解されている配列とは異なります。また、使用法も Hashtable と似ています。


(2) 実際に呼び出されたときのパラメータと戻り値はすべてオブジェクトにパッケージ化されて送信されるため、PHP Web サービス メソッドは最大 1 つの受信パラメータと戻り値を持つことができます。

(3) PHP Web サービスは、カスタム型やカスタム型配列などの複合型もサポートしますが、複数の配列はサポートしません。

(4) 戻り値が複数の 2 次元テーブルである必要がある場合、形式は

[テーブル 1 の行数]、[テーブル 1 の列数] で渡せると表面的に考えました。テーブル1]、[テーブル1の列数] 1列名1]、[テーブル1の列名2]、…[テーブル1の列名N]、[テーブル1の行と列に格納される値]


[表2の行番号]、[表2の列番号]、[表2の列名1]、[表2の列名2]、…[表2の列名N]、[表2の格納値]行と列]

...

[テーブル M 行番号]、[テーブル M 列番号]、[テーブル M 列名 1]、[テーブル M 列名 2]、...[テーブル M 列名] N]、[表 2 の行と列に格納される値]

上記は、Web サービスの典型的な例の PHP コンテンツを調整するための .NET です。その他の関連記事については、PHP 中国語 Web サイト (www. php.cn)!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。