2010年04月21日

今度は問題なく

今度はちょっと打診があったのでphpのSOAPClientとC#のSOAPServerでの動作検証。
これまでの逆バージョンですね。

C#側はWebServiceのプロジェクトを作成して、メソッドの戻り値たちを1つのクラスとして
作成して、そいつを戻してやります。

    [WebMethod]
    public responseData getGudaguda() {

        responseData piyopiyo = new responseData();

        piyopiyo.param1 = "hoge";
        piyopiyo.param2 = "hogehoge";

        return piyopiyo;
    }

実行すると

http://localhost:1234/hogehogeWebService/Service.asmx

みたいなURLが生成されるので、後ろに?wsdlをつけて

http://localhost:1234/hogehogeWebService/Service.asmx?wsdl

とするとWSDLが取得できます。
ここまではC#でWebServiceつくるのとなんだ違いはないのでわざわざ解説すること
でもないですね。


ちなみにWSDLはこんな感じに出来上がってます。

<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
  <s:element name="getGudaguda">
    <s:complexType />
  </s:element>
  <s:element name="getGudagudaResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="getGudagudaResult" type="tns:responseData" /> 
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:complexType name="responseData">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="param1" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="param2" type="s:string" /> 
    </s:sequence>
  </s:complexType>
</s:schema>
</wsdl:types>
<wsdl:message name="getGudagudaSoapIn">
  <wsdl:part name="parameters" element="tns:getGudaguda" /> 
</wsdl:message>
<wsdl:message name="getGudagudaSoapOut">
  <wsdl:part name="parameters" element="tns:getGudagudaResponse" /> 
</wsdl:message>



一方PHPのSOAP Clientも簡単です。

<?php

// オプション設定
$options = array("encoding" => "UTF-8",);

// SOAPClient生成
$client = new SoapClient("http://localhost:1234/hogehogeWebService/Service.asmx?wsdl", $options);

$res = $client->getGudaguda();

?>

でOK。

$resはstdClassで、$res->getGudagudaResult->param1, $res->getGudagudaResult->param2 で
値を取得できます。実運用ではSOAPリクエストのタイムアウトを考慮する必要があります。

C#からbyte配列のデータを戻り値で受け取るようなものを作ってみたんですが、C#, PHPそれぞれで
base64を使ってencode/decodeしてくれてるみたいで、アプリケーション側ではバイナリデータを
意識することなく受け渡しできるようですね。

ラクチンです。
PHPをSOAP Serverにしたときはあんなに苦労したのに。。。。

ラベル:soap PHP C#.NET Web Service
posted by しげ at 16:01| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

2010年04月19日

明日は明日。

インプレスのINTERNET WatchのやじうまWatchで取り上げられてた
出版業界のリストラ事情のブログを読んでます。


幸いなことに今のところ「オマエ、クビ」とも「いつでも辞めてくれ」とも
「どう?辞めてみたら?」とも言われたこともなくて、こんないい加減な人間ながらも
継続して会社員で居られてますが、この先どうなるんだろう?という疑問は
解決されることなくずーっと残ってます。


以前の会社であれば継続雇用の見通しがあって、出世街道ならこうで外れたらこう
という定年までの道筋が見えていましたが、今の会社は会社の規模が小さくて
道筋が見えないというか、道がありません。
そもそも前を行く人がいないし。

なので定年までカリカリとコーディングしてるかもしれないし、朝から新聞読んでるだけの人に
なってるかもしれません。もしくはストックオプション(そんな制度ないけど)で悠々自適な生活を
送ってるかも。
まあ、一番ありそうなのは「辞めてくれ」でしょうけど(震


ただ、前の会社を辞めるときに、「おいらはこの業界で生きていけるし生きてくんだ!」
と決めたので、辞めろといわれようと会社がなくなろうと前を向いて進んでいこうと
思ってます。
と言いつつ、もしも業界で生きていけなければ皿洗いでも日雇いでも。


なんせ生きることと、ローンと家族をどうにかするってことが同義語なもんで。


posted by しげ at 11:23| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年04月15日

SOAPにはまった

PHPのSOAPServerとC#.net2005のClientの連携、最終話です(歓喜の涙。


PHPのSOAPServer側で、WSDLで定義した通りに戻り値を設定できず、
かなり苦戦しましたが、実稼動時間で約24時間かけてようやく解決しました。


原因はPHP5.2.5のSOAPのバグでした。
(PHP5.2.9では解決していました)


時間返してくれぇ!!!



具体的にどんな問題があったかというと。

WSDLモードでSOAPServerを実行し、メソッドの戻り値として
WSDLで配列を含むような入れ子になる型定義(TYPE)をしている場合に、
PHPが入れ子構造を認識できない(入れ子の途中が飛ぶ?)という事象です。

少々端折ってますがWSDLはこんなかんじ。
PHPにはWSDLの生成機能がないのでC#でWebServiceを作ってそれを元に作成しました。
(SOAP-ExtensionじゃなくてNuSOAPとかだと生成できるのかな?)


<xsd:element name="もどりのデータ">
  <xsd:complexType>
    <xsd:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="でーた" type="xsd:string" />
      <s:element minOccurs="1" maxOccurs="1" name="でんわでーた" type="ns:でんわりすとがた" />
    </xsd:sequence>
  </xsd:complexType>


</xsd:element>
・・・
<xsd:complexType name="でんわリストがた">

 <xsd:sequence>
  
<xsd:element name="でんわ" type="ns:でんわがた" minOccurs="1" maxOccurs="unbounded" />
 </xsd:sequence>


</xsd:complexType>
・・・
<xsd:complexType name="でんわがた">
 <xsd:sequence>
 <xsd:element name="じたく" type="xsd:string" />
 <xsd:element name="けいたい" type="xsd:string" />
 <xsd:element name="そのた" type="xsd:string" />
 </xsd:sequence>
</xsd:complexType>



こんなかんじで「でんわでーた」データは「でんわ」配列のデータで、配列の要素の中身は
「でんわがた」で定義されてるハッシュ(連想配列)のデータ、という戻り値です。

でーた
でんわ[0].じたく
でんわ[0].けいたい
でんわ[0].そのた
でんわ[1].じたく
でんわ[1].けいたい
でんわ[1].そのた
・・・


という形が出来上がり形ですね。


定義通りにメソッド戻り値として

$はいれつ[] = array("じたく"=>"・・・", "けいたい"=>"・・・", "そのた"=>"・・・");
return ("でーた" => "・・・", "でんわでーた" => array ("でんわ"=>$はいれつ),);

としてやったんですが、PHPからは

SOAP-ERROR: Encoding: object hasn't 'じたく' property in ・・・
(意訳:"じたく"がセットされてねぇから動いてやらねぇよっ)


と怒られました。
PHPは「でんわでーた」の存在を無視してたみたいで、

でーた
じたく
けいたい
そのた

だと言い張ってくれてます。

で、これが発生してたのがPHP5.2.5の環境。
PHP5.2.9の環境で動かすとちゃんと動いてくれました。


あまりに不可解なのでWSDLの定義をチェックしたり、サンプルのWSDLをかき集めたり、
PHPのソースを見て解析しようとしてあっさり断念したり、PHP-PHP間でテストしてみたり、
かーなり苦労しました。

バージョンの差分をとって不具合の箇所を特定してその箇所を修正してPHPをビルドしなおして
みるとPHP5.2.5でも正常に動いたのでもう大丈夫・・・と思います。


ほんととっても疲れました。
何だかとても眠いんだ。
パトラッシュ。。。

そうそう、タイトルが過去形だけど、ちょっと怪しいところがあるんです。
もうやだよ、パトラッシュ。。。



ラベル:C#.net2005 soap PHP
posted by しげ at 14:32| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

2010年04月12日

おっとあやうく

メールチェックしてたら、こんなメールが来てました。

以下引用================================================================

Yahoo! JAPAN より重要なお知らせです
返信
From    Yahoo! Mail Customer Service <mail-master@mail.yahoo.co.jp>
返信先    Yahoo! Mail Customer Service <mail-master@mail.yahoo.co.jp>
To    xxxxxxxxxxxx@xxxxxx.xx.xx
日付    2010年4月10日14:26
件名    Yahoo! JAPAN より重要なお知らせです
送信元    itm-asp.com
--------------------------------------------------------------------
Yahoo! JAPAN - ユーザーアカウント継続手続き
--------------------------------------------------------------------

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
この自動通知メールはYahoo!オークションより自動的に送信されています。
このメールに返信しないようお願いいたします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

いつもyahoo!オークションをご利用いただきありがとうございます。
Yahoo!オークションを今後も継続してご利用いただくためには、Yahoo! JAPAN ID
ユーザーアカウント継続手続きが必要です。

詳しくはユーザーアカウント継続手続きページをご覧ください

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆


ユーザーアカウント継続手続きページはこちら
http://suport-home.lineup.jp



◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
☆★☆★☆クレバリーパソコンクリニック開院!☆★☆★☆
―――パソコンのお悩み・お困りの事ありませんか?―――
当社の専門スタッフが、安心のサポートをお届けします!

↓↓パソコンクリニックはこちら↓↓
http://www.clevery.co.jp/pc-clinic/?utm_source=melma1&utm_medium=clinic
↓↓  メニュー表はこちら  ↓↓
http://www.clevery.co.jp/pc-clinic/price_list.html?utm_source=melma1&utm_medium=clinic

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★配信の停止は下記URLにてお願いいたします。
https://www.clevery.co.jp/melma/

★このメールに返信されても、クレバリーには届きません。
ご意見・ご感想は下記のメールまでお願い致します。
y-kuma@clevery.co.jp

★最新入荷情報からスタッフの戯言まで・・・随時更新中!
「クマ出没!アキバ注意報!(クレバリーブログ)」
http://blog.livedoor.jp/y_kuma/?utm_source=melma1&utm_medium=outside

★秋葉原3店舗のイベント情報・オススメ情報を毎日お届け!
「店舗ブログ (クレナビ)」
http://clenavi.blog36.fc2.com/?utm_source=melma1&utm_medium=outside
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※本文に掲載されている会社名・製品名は、各会社の商標または登録商標です。
※本メールマガジンに掲載されている文書および画像の著作権は、株式会社クレ
バリーに帰属します。掲載記事を無断で転載・転用・加工することを禁止します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
配信停止はこちら
http://www.itm-asp.com/db_stop/mail_stop/stop.php?m=xxxx&mid=xxxxxxxxxxxxxxxx&num=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


以下引用おわり==========================================================



なんだ、ヤフオクのアカウントって定期更新がいるのか、とURLをクリックしたら
こんな画面が。

20100412-01.jpg


「???」と思ったものの、特に深く考えずに次の画面へ行くと

20100412-02.jpg
注意!!)魚拓


こんな感じの画面になりました。
住所、氏名、カード番号なんかの入力画面です。



「なんだめんどくせぇ、全部入れるのかよ?」
「カードの有効期限、まだ来てないハズなのに洗い替えか」
「サイフ、部屋にないから取りに行かなくちゃ、めんどくせぇ」



などとめんどくさがってるうちに、ようやく気づきました。


フィッシングサイトですね。


1つ目の警告をちゃんと読んでればもっと早く気づいてましたが、httpsの
警告かなにかと思い、読み飛ばしてました。。。


こういうサイトってどこかへ報告したほうがいいんでしょうかね?

とりあえずYahoo!へ迷惑メールとして報告しましたが。
GoogleChromeがフィッシングサイトと教えてくれるので既にどっかに
登録されているんでしょうけど。


しかし、ひっかかりそうになってしまった自分が情けないです。。。
posted by しげ at 03:50| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年04月09日

モノの値段

うちでは新聞をとってません。
あれば読むけど必要不可欠なものではないので。

4月から日経の電子版というものが始まったらしいという情報を得て、
日経のサイトに行ってみました。
良かったら購読しようかと思って。

サイトを見て回ったんですが、


■電子版 月ぎめプラン
月額4,000円
   
■日経Wプラン(宅配+電子版)
月額5,383円(セット版地域)
月額4,568円(全日版地域)
(新聞購読料*1+1,000円)


だそうです。
んで、

1週間分は閲覧できて、それ以前は検索して見れる。
検索件数が25件を超えたら175円/件。

とのこと。

情報は無料じゃないってのは判りますが、朝夕セットを配達してもらって4300円で
してもらわない電子版が4000円って????


なんだか納得できないので会員になるのは辞めました。

折り込み広告無いのに4000円って。
通信コスト負担もあるのに、物理媒体と差が無いって。

納得できないっす。
posted by しげ at 01:47| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年04月07日

SOAPにはまる2

前のエントリの続き。

本筋の作業の合間の息抜きに通信テストしてるのですが(仕事の息抜きに仕事って(涙))、
またもやはまってしまった点をメモ。



PHPのメソッドでは、連想配列をメソッドの戻り値として指定してるんですが。

 WSDLの戻り値の名前 = 連想配列のキー

でなくてもExceptionは発生しないようです。
戻り値の値がNULLになるだけ。間違えてる私が悪いんですが。。。
(WSDLの作りによってそうならないこともあり得ると思いますが)


もう一つ。


メソッドを定義したPHPで例えばPHPのソース部分の最後?>のあとに空白や改行があると、
Client側のC#.NETで「XMLが正しくねぇよ」って怒られます。
処理自体やWSDLに問題がなく、パッと見で気づかないので要注意。


当然ながら、開発中はphp.iniでSOAPのキャッシュをオフにしておきましょう。

 soap.wsdl_cache_enabled = 0



ラベル:soap PHP C#.NET 2005 xml
posted by しげ at 19:20| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

SOAPではまる

XAMPP環境のPHPをServer、C#.net2005をClientとしてSOAP通信のテスト中。

手で作成したWSDLを使って動かしてみたんですが、Serverの処理結果の受け取り時に、C#側で


クライアントは 'text/html' の応答のコンテンツ タイプを見つけましたが、'text/xml' が必要です。
要求は以下のエラーにより失敗しました。
--
<?xml version="1.0" encoding="UTF-8"?>
以下略


というInvalidOperationExceptionが発生しちゃいました。

エラー内容を見てみると、以下略の部分にSOAPのリクエストの結果がちゃんと入ってるのでサーバ側
処理は完結しているようです。


メッセージをそのまま解釈すれば、

・SOAP ServerのPHPがちゃんとtext/xmlで送るべき
・SOAP ClientのC#.net2005がtext/htmlとして受け取れ
・SOAP ClientのC#.net2005がtext/xmlとして読み取れ

のどれかを対応すれば解決できると思いました。

で、サーバ側の設定、クライアント側の設定、WSDLに問題が無いか(default値でまずい部分がないか)を
調べてみたのですが、原因不明。

結構時間をかけて情報収集したのですが、結論はでず。

投げれるものならサジを投げたくなってきました。


ふと思うところがあって、試しにCentOSで動かしているサーバにSOAPサーバ側を動かしてテストしてみたら・・・


うまく行きました。
なんでやねん



XAMPPでなく、Apache/PHPを個別にいれたWindow2003環境でテストしてみたら・・・


うまく行きました。



XAMPPのApacheか、PHPかのどちらかの設定に依存する問題と分かりました。
原因を調べる余裕が無いので、原因不明のまま動作確認を急ぎます。


あぁ、つかれた。

posted by しげ at 15:13| Comment(0) | TrackBack(1) | PHP | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。