fc2ブログ
1年5組 C#・Webサービス・スマートクライアント
C#・Webサービス・スマートクライアント
カテゴリー

最新の記事

プロフィール

 山添聡之

Author: 山添聡之

ブログ検索

メールフォーム

名前:
メール:
件名:
本文:

FC2カウンター

ブログ全記事表示

全ての記事を表示する

Windows Mobile 開発/Advanced/W-ZERO3[es]アプリケーションの開発環境を整える
スマートクライアントをAdvanced/W-ZERO3[es]【WS011SH】上で実行させることにする

開発環境の構築手順を簡単に記録

①付属のCD-ROMから「Microsoft ActiveSync 4.5」をインストール
なぜかアドエスとPCが接続ができない・・・
ソースネクストのウイルスセキュリティZEROの設定を変更したら接続可に

②Visual Studio 2005 Service Pack 1をインストール
最初、この手順を省略したらVSのツールボックスにコントロールが1つもないという状態に・・・
SP1をインストールしたらいつも通りに

③Windows Mobile 6 Professional SDK Refresh.msiをダウンロードしてインストール
最初、Ver5をインストールしたのだが、これだとアドエス上でデバッグした時にエラーが出る

④Windows Mobile 6 Professional Images (JPN).msiをダウンロードしてインストール

⑤PCとデバイスを再起動

注意:
XML Webサービスを実行した時にソースネクストのウイルスセキュリティZEROを実行しているとエラーになる・・・
普通のWindowsアプリだとエラーにならないのだがモバイルアプリだとWebサービスを呼び出せない・・・
とりあえず、ウイルスセキュリティZEROを止めたら正常に実行できた
スポンサーサイト



フリーソフト/指定した時間にメール送信/サービス一時停止のお知らせ
XMLWebサービスを配置しているレンタルサーバの関係で、
暫くソフトウェアが停止します。

出来るだけ早く再開するようにいたします。
フリーソフト/性格診断テスト/サービス一時停止のお知らせ
XMLWebサービスを配置しているレンタルサーバの関係で、
暫くソフトウェアが停止します。

出来るだけ早く再開するようにいたします。
フリーソフト/設定した時間間隔で指定した為替レートを取得保存/サービス一時停止
XMLWebサービスを配置しているレンタルサーバの関係で、
暫くソフトウェアが停止します。

出来るだけ早く再開するようにいたします。
サンプルコード(C#)/印刷プレビューダイアログの表示・大きさを手動で指定する
printPreviewDialog1.StartPosition = FormStartPosition.Manual;
printPreviewDialog1.SetBounds(0, 0, 800, 600);
サンプルコード(C#)/DataGridViewで選択した行の指定列の値を取得する
string Name = dataGridView1.CurrentRow.Cells["宿泊者漢字氏名"].Value.ToString();
サンプルコード(C#)/静的(static)変数を宣言する
namespace ReprintSystem
{
public partial class Form1 : Form
{
#region 初期処理

static int Index;

#endregion
}
}
サンプルコード(C#)/DataGridViewをクリックした際、選択した行の行番号を取得する
#region 「DataGridViewコントロールクリック」イベント
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
int Index = e.RowIndex;
}
#endregion
サンプルコード(C#)/DataGridViewを行単位でのみの選択可能にする
#region DataGridViewを行単位でのみの選択可能にする

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

#endregion
サンプルコード(C#)/クライアント側DBに接続し最近30件のデータを取得する
#region DBに接続して最近30件の印刷データを取得する

System.Data.OleDb.OleDbConnection Connection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=PrintOutSystemVer2-0-0Shibuya.mdb;");

System.Data.OleDb.OleDbDataAdapter Adapter = new System.Data.OleDb.OleDbDataAdapter("SELECT TOP 30 * FROM 印刷データテーブル ORDER BY 印字番号 DESC", Connection);

DataSet PrintOutDataSet = new DataSet("印刷データテーブル");

Adapter.Fill(PrintOutDataSet, "印刷データテーブル");

#endregion
サンプルコード(C#)/DataGridViewにDataSetの内容を表示する
#region DataGridViewにDataSetの内容を表示する

dataGridView1.DataSource = PrintOutDataSet.Tables["印刷データテーブル"];

#endregion
サンプルコード(C#)/notifyIconでタスクトレイに表示したアイコンが消えない場合の処理
#region 終了メニュー押下イベント
private void 終了ToolStripMenuItem_Click(object sender, EventArgs e)
{
notifyIcon1.Visible = false;
Environment.Exit(0);
}
#endregion
サンプルコード(C#)/メソッドを作成する
private void button1_Click(object sender, EventArgs e)
{
string Parameter = "パラメーター";
string Result = MyMethod(Parameter);

MessageBox.Show(Result, "結果");
}

string MyMethod(string Parameter)
{
return Parameter;
}
サンプルコード(C#)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)⑨
スマートクライアント側のソースコード

#region DELETE文を実行するWebサービスを呼び出す
private void button6_Click(object sender, EventArgs e)
{
#region "TestRESTService06.php"を呼び出してDBにレコードを削除する

//Webサービスに渡すデータをエンコードする
byte[] bytePrimaryKey = Encoding.GetEncoding("EUC-JP").GetBytes(textBox7.Text);
string PrimaryKey = Convert.ToBase64String(bytePrimaryKey);

WebRequest WebRequestObject = WebRequest.Create("http://*****.80code.com/TestRESTService/TestRESTService06.php?PrimaryKey=" + PrimaryKey);

WebResponse WebResponseObject = WebRequestObject.GetResponse();

#endregion
}
#endregion
サンプルコード(C#)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)⑧
スマートクライアント側のソースコード

#region UPDATE文を実行するWebサービスを呼び出す
private void button5_Click(object sender, EventArgs e)
{
#region "TestRESTService05.php"を呼び出してDBにレコードを修正する

//Webサービスに渡すデータをエンコードする
byte[] bytePrimaryKey = Encoding.GetEncoding("EUC-JP").GetBytes(textBox4.Text);
string PrimaryKey = Convert.ToBase64String(bytePrimaryKey);
byte[] byteUpDateData1 = Encoding.GetEncoding("EUC-JP").GetBytes(textBox5.Text);
string UpDateData1 = Convert.ToBase64String(byteUpDateData1);
byte[] byteUpDateData2 = Encoding.GetEncoding("EUC-JP").GetBytes(textBox6.Text);
string UpDateData2 = Convert.ToBase64String(byteUpDateData2);

WebRequest WebRequestObject = WebRequest.Create("http://*****.80code.com/TestRESTService/TestRESTService05.php?PrimaryKey=" + PrimaryKey + "&UpDateData1=" + UpDateData1 + "&UpDateData2=" + UpDateData2);

WebResponse WebResponseObject = WebRequestObject.GetResponse();

#endregion
}
#endregion
サンプルコード(C#)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)⑦
スマートクライアント側のソースコード

#region INSERT文を実行するWebサービスを呼び出す
private void button4_Click(object sender, EventArgs e)
{
#region "TestRESTService04.php"を呼び出してDBに新規レコードを挿入する

//更新データをエンコードする
byte[] byteColumn1 = Encoding.GetEncoding("EUC-JP").GetBytes(textBox1.Text);
string Column1 = Convert.ToBase64String(byteColumn1);
byte[] byteColumn2 = Encoding.GetEncoding("EUC-JP").GetBytes(textBox2.Text);
string Column2 = Convert.ToBase64String(byteColumn2);
byte[] byteColumn3 = Encoding.GetEncoding("EUC-JP").GetBytes(textBox3.Text);
string Column3 = Convert.ToBase64String(byteColumn3);

WebRequest WebRequestObject = WebRequest.Create("http://*****.80code.com/TestRESTService/TestRESTService04.php?Column1=" + Column1 + "&Column2=" + Column2 + "&Column3=" + Column3);

WebResponse WebResponseObject = WebRequestObject.GetResponse();

#endregion
}
#endregion
サンプルコード(C#)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)⑥
スマートクライアント側のソースコード

#region SELECT文を実行するWebサービスを呼び出す
private void button3_Click(object sender, EventArgs e)
{
#region "TestRESTService03.php"を呼び出してXMLデータを取得する

WebRequest WebRequestObject = WebRequest.Create("http://*****.80code.com/TestRESTService/TestRESTService03.php");

WebResponse WebResponseObject = WebRequestObject.GetResponse();

XmlDocument XmlDocumentObject = new XmlDocument();
XmlDocumentObject.Load(WebResponseObject.GetResponseStream());

#endregion

#region 取得したXMLデータをDataSetに格納する

DataSet XMLDataSet = new DataSet();
XMLDataSet.ReadXml(new XmlNodeReader(XmlDocumentObject));

#endregion
}
#endregion
サンプルコード(PHP)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)⑤
DELETE文を実行するWebサービス
サーバに配置して後ほどC#で作成したスマートクライアントより呼び出す

TestRESTService06.php

ソースコード


サンプルコード(PHP)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)④
UPDATE文を実行するWebサービス
サーバに配置して後ほどC#で作成したスマートクライアントより呼び出す

TestRESTService05.php

ソースコード


サンプルコード(PHP)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)③
INSERT文を実行するWebサービス
サーバに配置して後ほどC#で作成したスマートクライアントより呼び出す

TestRESTService04.php

ソースコード


サンプルコード(PHP)/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)②
SELECT文を実行するWebサービス
サーバに配置して後ほどC#で作成したスマートクライアントより呼び出す

TestRESTService03.php

ソースコード


サンプルコード/MySQLを操作するWebサービス(PHP)とスマートクライアント(C#)①
C#によるスマートクライアントを作成する
実装するWebサービスはPHPで開発したものを使用する
提供する機能はMySQLに対するSELECT文・INSERT文・UPDATE文・DELETE文の実行
サンプルコード(C#)/PHPで開発したWebサービスをC#で作成したアプリに実装する⑤
TestRESTService02.phpをC#より呼び出す

#region TestStart02ボタン押下イベント
private void button2_Click(object sender, EventArgs e)
{
#region "TestRESTService02.php"を呼び出してXMLデータを取得する

WebRequest WebRequestObject = WebRequest.Create("http://*****.80code.com/TestRESTService/TestRESTService02.php");

WebResponse WebResponseObject = WebRequestObject.GetResponse();

XmlDocument XmlDocumentObject = new XmlDocument();
XmlDocumentObject.Load(WebResponseObject.GetResponseStream());

#endregion

#region 取得したXMLデータをDataSetに格納する

DataSet XMLDataSet = new DataSet();
XMLDataSet.ReadXml(new XmlNodeReader(XmlDocumentObject));

#endregion
}
#endregion
サンプルコード(C#)/PHPで開発したWebサービスをC#で作成したアプリに実装する④
TestRESTService01.phpをC#より呼び出す

#region TestStart01ボタン押下イベント
private void button1_Click(object sender, EventArgs e)
{
#region "TestRESTService01.php"を呼び出してXMLデータを取得する

WebRequest WebRequestObject = WebRequest.Create("http://*****.80code.com/TestRESTService/TestRESTService01.php");

WebResponse WebResponseObject = WebRequestObject.GetResponse();

XmlDocument XmlDocumentObject = new XmlDocument();
XmlDocumentObject.Load(WebResponseObject.GetResponseStream());

#endregion

#region 取得したXMLデータをDataSetに格納する

DataSet XMLDataSet = new DataSet();
XMLDataSet.ReadXml(new XmlNodeReader(XmlDocumentObject));

#endregion
}
#endregion
サンプルコード(PHP)/PHPで開発したWebサービスをC#で作成したアプリに実装する③
TestRESTService02.php
多次元配列の値をXML形式で返すプログラム(PHP)
サーバに配置して後ほどクライアントから呼び出す

ソースコード


サンプルコード(PHP)/PHPで開発したWebサービスをC#で作成したアプリに実装する②
TestRESTService01.php
変数の値をXML形式で返すプログラム(PHP)
サーバに配置して後ほどクライアントから呼び出す

ソースコード


サンプルコード/PHPで開発したWebサービスをC#で作成したアプリに実装する①
目的

PHP(サーバ)で生成したXMLデータをC#(クライアント)で受け取りたい
通信方法はSOAPでなくREST方式を使いたい


前提

【クライアント】
Windows XP
.NET Framework
C#

【サーバ(レンタルサーバ80code.com)】
UNIX/Apache
PHP


シナリオ


C#によるWinアプリから
PHPで開発したXMLデータを返すWebサービスを呼び出す


呼び出されたPHPはクライアントにXMLデータを返す


取得したXMLデータをDataSetに格納する


その他①

「XMLを返すもの = Webサービス」というのは厳密には成立しないらしい・・・
ただ、
『現在ではURIが何らかのソフトウェア的なリソースを表し、URIにアクセスすることでリソースを入出力できる一連のシステムをWebサービスと呼ぶ傾向があります。(by CodeZine)』
とあるので、
ここではPHPで開発したサービスをWebサービスと呼ぶことにします


その他②

通常、.NETでWebサービスを実装するならRESTよりもSOAPのほうが良いのだが、
Amazonが公開しているWebサービスではSOAPよりもRESTのほうが利用者が多いので
今回はRESTで実装したいと思います。
サンプルコード(C#)/空メールシステム③
#region メールの返信

WebService.Service WebService = new WebService.Service();
WebService.TestKaraMailSystemSendMail(From);

#endregion

MessageBox.Show("テストは成功しました", "テスト成功");
サンプルコード(C#)/空メールシステム②
#region メールの解析と処理

//受信したメールを変数に格納する
Mail MailObject = new Mail(MailText);
string From = "";
try
{
//送信者のアドレスを取得する
From = MailHeader.Decode(MailObject.Header["From"][0]);
From = From.Substring(6, From.Length - 6);
}
catch
{
//送信者のアドレスを取得する(ヘッダーから送信者Addressが読み取れなかった場合)
MessageBox.Show("ヘッダーが読み取れませんでした", "エラー");
int Start = MailText.IndexOf("Return-Path: <");
Start = Start + 14;
int End = MailText.IndexOf("Received:");
End = End - 3;
From = MailText.Substring(Start, End - Start);
}

#endregion
サンプルコード(C#)/空メールシステム①
#region メールの取得と削除

//80code.comのメールサーバと接続
TcpClient TcpObject = new TcpClient("***.80code.com", 110);
StreamReader ReaderObject = new StreamReader(TcpObject.GetStream(), Encoding.ASCII);
//処理が成功したか確認
string ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("接続時にサーバが" + ReadMessage + "を返しました。");
}

//80code.comのメールサーバにユーザーIDを送信
byte[] SendMessage = Encoding.ASCII.GetBytes("USER *****@**********" + "\r\n");
TcpObject.GetStream().Write(SendMessage, 0, SendMessage.Length);
//処理が成功したか確認
ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("ユーザーID送信時にサーバが" + ReadMessage + "を返しました。");
}

//80code.comのメールサーバにパスワードを送信
SendMessage = Encoding.ASCII.GetBytes("PASS *******" + "\r\n");
TcpObject.GetStream().Write(SendMessage, 0, SendMessage.Length);
//処理が成功したか確認
ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("パスワード送信時にサーバが" + ReadMessage + "を返しました。");
}

//80code.comのメールサーバに保存されているメールリストを要求
SendMessage = Encoding.ASCII.GetBytes("LIST" + "\r\n");
TcpObject.GetStream().Write(SendMessage, 0, SendMessage.Length);
//処理が成功したか確認
ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("リスト要求時にサーバが" + ReadMessage + "を返しました。");
}
//80code.comのメールサーバに保存されているメールリストを取得
ArrayList MailList = new ArrayList();
while (true)
{
ReadMessage = ReaderObject.ReadLine();
if (ReadMessage == ".")
{
//終端に到達
break;
}
int ListNo = ReadMessage.IndexOf(' ');
if (ListNo > 0)
{
ReadMessage = ReadMessage.Substring(0, ListNo);
}
MailList.Add(ReadMessage);
}

//80code.comのメールサーバに保存されているメールを取得
try
{
SendMessage = Encoding.ASCII.GetBytes("RETR " + MailList[0].ToString() + "\r\n");
}
catch
{
//メールが0件の時は処理を終了する
MessageBox.Show("メールは0件でした", "メールは0件でした");
return;
}
TcpObject.GetStream().Write(SendMessage, 0, SendMessage.Length);
//処理が成功したか確認
ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("メール取得時にサーバが" + ReadMessage + "を返しました。");
}
StringBuilder StringBuilderObject = new StringBuilder();
while (true)
{
ReadMessage = ReaderObject.ReadLine();
if (ReadMessage == ".")
{
//メールの終端
break;
}
StringBuilderObject.Append(ReadMessage);
StringBuilderObject.Append("\r\n");
}
string MailText = StringBuilderObject.ToString();

//80code.comのメールサーバに保存されているメールを削除
SendMessage = Encoding.ASCII.GetBytes("DELE " + MailList[0].ToString() + "\r\n");
TcpObject.GetStream().Write(SendMessage, 0, SendMessage.Length);
//処理が成功したか確認
ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("メール削除時にサーバが" + ReadMessage + "を返しました。");
}

//80code.comのメールサーバとの接続を切断する
SendMessage = Encoding.ASCII.GetBytes("QUIT\r\n");
TcpObject.GetStream().Write(SendMessage, 0, SendMessage.Length);
//処理が成功したか確認
ReadMessage = ReaderObject.ReadLine();
if (!ReadMessage.StartsWith("+OK"))
{
MessageBox.Show("切断処理時にサーバが" + ReadMessage + "を返しました。");
}

#endregion