|
分類:[C#]
お世話になります。
マルチスレッド化について質問です。
大まかな処理の流れです。
@Hoko.php
引数(報告日)を取得します。これはABへの引数を取得するためのスクリプト。
AAAA.php、BBB.php、CCC.php
並列処理を行います。
BXXX.php
最終処理を行います。
@、A、BすべてPHPのスクリプトです。
これを.NET(C#)からWebサービスとして起動させています。
プログラムを実行するとエラーが発生してしまいます。
(それぞれのPHPを個別で処理させれば正常に動くのですが。。)
どこが原因でエラーになるのか、まるで分からず困っています。
原因や、対策、別の方法での回避策など、アドバイス頂きたいです。
宜しくお願いします。
●●● ↓はコンソールへの出力結果です。 ●●●
並列処理終了
最終処理を開始します
ハンドルされていない例外: System.Net.WebException: 要求は中止されました: 要求がキャンセルされました
場所 System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
場所 System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
場所 testMultiThread.XXX.testService.test(String inputString)
場所 C:\Documents and Settings\rio\My Documents\Visual Studio 2005\Projects\TEST\testMultiThread\testMultiThread\Web References\XXX\Reference.cs:行 79
場所 testMultiThread.Threadinfo.tXXX()
場所 C:\Documents and Settings\rio\My Documents\Visual Studio 2005\Projects\TEST\testMultiThread\testMultiThread\Program.cs:行 421
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()
続行するには何かキーを押してください . . .
●●● ここから下がソースです。 ●●●
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Threading;
namespace testMultiThread
{
/*
* マルチスレッドメソッドのためのクラス
*/
class Threadinfo
{
// スレッドが返す値
public string ReturnValue;
// スレッドに渡す値
public string strHokodate;
// インストラクタ
public Threadinfo(string hokodate)
{
this.strHokodate = hokodate;
}
//AAA.php
public void tAAA()
{
//Webサービスのインスタンス
AAA.testService wsTest = new AAA.testService();
//Webサービスの呼び出し
wsTest.test(this.strHokodate);
}
//BBB.php
public void tBBB()
{
//Webサービスのインスタンス
BBB.testService wsTest = new BBB.testService();
//Webサービスの呼び出し
wsTest.test(this.strHokodate);
}
//CCC.php
public void tCCC()
{
//Webサービスのインスタンス
CCC.testService wsTest = new CCC.testService();
//Webサービスの呼び出し
wsTest.test(this.strHokodate);
}
//XXX.php
public void tXXX()
{
//Webサービスのインスタンス
XXX.testService wsTest = new XXX.testService();
//Webサービスの呼び出し
wsTest.test(this.strHokodate);
}
}
class Program
{
/*
* エントリポイント
*/
public static void Main(string[] args)
{
/*
* Hoko.php スレッドへの引数(報告日)を取得
*/
string strHokodate;
// Webサービスのインスタンス
localhost.Hokodate wsMyService = new localhost.Hokodate();
// Webサービスの呼び出し
strHokodate = wsMyService.getHokodate("");
/*
* 並列処理
*/
// スレッドに渡すデータを設定
Threadinfo info = new Threadinfo(strHokodate);
Thread tAAA = new Thread(new ThreadStart(info.tAAA));
Thread tBBB = new Thread(new ThreadStart(info.tBBB));
Thread tCCC = new Thread(new ThreadStart(info.tCCC));
tAAA.Start();
tBBB.Start();
tCCC.Start();
tAAA.Join();
tBBB.Join();
tCCC.Join();
Console.WriteLine("並列処理終了");
/*
* 最終処理
*/
Thread tXXX = new Thread(new ThreadStart(info.tXXX));
tXXX.Start();
Console.WriteLine("最終処理を開始します");
tXXX.Join();
Console.WriteLine("最終処理終了");
}
}
}
|