ホームページ > バックエンド開発 > PHPチュートリアル > PHP が C# Web サービスを呼び出す際の問題を解決してください。

PHP が C# Web サービスを呼び出す際の問題を解決してください。

WBOY
リリース: 2016-06-23 14:15:45
オリジナル
923 人が閲覧しました

header("content-type:text/html;charset=utf-8");$client = new SoapClient("http://s.dailiangu.com:8011/WebLocalData.asmx?WSDL");$p = $client->__soapCall('Return_Package', array('UN'=>'xxxxxxx','PS'=>'xxxxxxx','TopCount'=>5));//var_dump($p);//结果从这里分析
ログイン後にコピー

Retrun_Package というメソッドがあり、ユーザー名、パスワード、呼び出し回数の 3 つのパラメータを渡す必要があります。ここでは代わりに XXX を使用しましたが、最終的には PHP にあまり詳しくないのでエラーが報告されました。修正していただければ幸いです。


ディスカッションへの返信 (解決策)

2 つの UN PS パラメータを通常のものと合法的なものに変更して試してください

通常使用すると、次のエラーが表示されます:
Fatal error: Uncaught SoapFaultException: [soap: Server] System.Web .Services.Protocols.SoapException: サーバーは要求を処理できませんでした。---> System.NullReferenceException: WebService1.WebLocalData.Return_Package(String UN, String) でオブジェクト参照が設定されていません。 PS、Int32 TopCount) F: 関連する Web サイト テスト サービスの開発 - Web サービスの外部テスト WebService1WebService1WebLocalData.asmx.cs:line 26 --- 内部例外スタック トレースの終わり --- E:APMAPMServ5.2.6wwwhtdocstempletsnewtest.php :11 スタック トレース: #0 E:APMAPMServ5.2.6wwwhtdocstempletsnewtest.php(11): SoapClient->__soapCall('Return_Package', Array) #1 {main} が E:APMAPMServ5.2.6wwwhtdocstempletsnewtest.php の 11 行目でスローされました

for php 私はsoapClientのカプセル化が好きではありません。透明すぎて、エラーメッセージは誤解を招きますが、この例ではこれに変更する必要があると思います

$client = new SoapClient("http://s.dailiangu.com:8011/WebLocalData.asmx?WSDL");$p = $client->Return_Package(array('UN'=>'xxxxxxx','PS'=>'xxxxxxx','TopCount'=>'5'));
ログイン後にコピー


それでも動作しない場合は、 curl または fsockopen を使用して、次に従ってください
http://s.dailiangu.com:8011 /WebLocalData.asmx?op=Return_Package
指定された要求プロトコル形式が要求されます。

以上、ありがとうございました、以上です。なるほど。では、内部のパラメータを取得するにはどうすればよいでしょうか? id パラメータが返された場合、それを取得するにはどうすればよいでしょうか?

返されるのは DataSet タイプで、各行 (各行はパッケージ) に次の 5 つの値が含まれます:

[WorkID] スタジオ番号、例: 48
[PID] パッケージ番号、例: 512
[Ptitle ] パッケージ名、例: XXXXXXXX
[Pri] 価格、例: 150.00
[H] パワーレベリング時間、例: 72 <これは時間単位を指します。変換する必要があります>

返されるのは DataSet タイプであり、その中の各行 (各行はパッケージです) には次の 5 つの値が含まれます:

[WorkID] スタジオ番号、例: 48
[PID] パッケージ番号、例: 512
[ Ptitle] パッケージ名、例: XXXXXXXX
[Pri] 価格、例: 150.00
[H] レベリング時間、例: 72 <これは時間単位を指し、換算する必要があります>

この場合、返されるのは XML 形式の文字列であるはずです

      <Return_PackageResult>        <xsd:schema>schema</xsd:schema>xml</Return_PackageResult>
ログイン後にコピー

PHP は、simplexml シリーズ、DOMDocument シリーズ、Sax シリーズで XML を解析します。 。
これはドキュメントを見れば自分で理解できます。

戻り値はこんな感じです
object(stdClass)#2 (1) { ["Return_PackageResult"]=> object(stdClass)#3 (2) { ["schema"]=> string(716) "" ["any"]=> string(1329) "68697【力の道場】レベル70~85★無料4000ゴールドと5大名声と尊敬★純粋任務70.008468698【力の道場】【S11栄誉戦場卒業】フルセットプラス武器【秒待ち2~3日】 50.008468700 【パワーレベリングの館】 レベルを磨くdnf手動パワーレベリング【どのレベルでも~ずん2】 40.002468715 【パワーレベリングの館】 【1~80レベル急募版】2で完成日数 すべてのリージョンとサーバー 30.006068716 [傾いたホール] [レベル 1-85 パッケージ カード 135 元] 無料 Big Bird のトップ 5 の評判と尊敬 135.00108" } }

ああ、soapClient が xml 結果を php オブジェクトに変換するのに役立っていたことを忘れていましたタイプ。

echo $p->Return_PackageResult->schema;
echo $p->Return_PackageResult->any;

ありがとう、ポイントをあげますが、まだ少し問題があります。 QQ でのチャットの方が便利です。 285994968

ありがとうございます。ポイントを差し上げますが、まだ少し問題があります。チャットに QQ を追加していただければ便利です。 285994968
今から忙しくなります。まだコメントは投稿しないでください。質問がある場合は、ここで質問してください。親切なフォーラムの友人がお手伝いします。

返却されるものは以下のとおりです:
68697 [力の訓練場] レベル 70-85 ★ 無料 4000 ゴールドと 5 つの主要な名声と尊敬 ★ 純粋な使命 70.008468698 [力の訓練場] [S11 栄誉戦場卒業] フルセット + 武器 [2 番目]キュー2〜3日] 50.008468700 [パワーレベリングの館] dnf手動パワーレベリングとレベルのブラッシュアップ [任意のレベル - Zun 2] 40.002468715 [パワーレベリングの館] [レベル1〜80の急募版] 2日で完了 すべてのリージョンとサーバー30.006068716 [パワーレベリングホール] [1 - レベル 85 パッケージカード 135 元] Big Bird の上位 5 つの評判を送信し、135.00108 を尊重します
以下のパラメータであるはずですが、それぞれどのように取得しますか?
68 715 [演技道場] [レベル1-80の急募版] 2日で完了 全地域およびサーバー 30.00 60
68 716 [演技道場] [レベル1-85パッケージカード135元] Big Birdの無料五つの評判尊重 135.00 108
会社番号 業務注文番号 内容

パブリック クラス DAL
{
public OracleConnection getcon
{
get
{
return new OracleConnection("data source=sajet_odac;user id=sajet;password=tech");
}
}
public string TestconDb()
{
using (var con = getcon)
{
試してみる
{
con.Open();
OracleCommand cmd = new OracleCommand("select sysdate from dual", con);
OracleDataReader rd = cmd.ExecuteReader();
if (rd.Read())
return rd.GetDateTime(0).ToString();                    
else
return "Connect DBError";                
}
catch (例外 ee)
{
return ee.メッセージ;
}
最後に
{
con.Close();

}
[WebMethod]
public string GetSysdate()
{
DAL d =new DAL();
return d.TestconDb();
}
======调用代码

private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.TsajetServerceSoapClient client = new ServiceReference1.TsajetServerceSoapClient();
MessageBox.Show(client.GetSysdate()) }
===============例外プロンプト
サーバーはリクエストを処理できませんでした。 . ---> オブジェクト参照がオブジェクトのインスタンスに設定されていません
===== Web サービスをローカルで呼び出すと動作しないということです。 。 。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート