[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[opensoap-users-ja:0026] Re: サ ーバ側での他のプログラム のinclude



坂東@ISRCです。

松本義秀 <gisyu@mikilab.doshisha.ac.jp> write:
:こんにちわ,以前お世話になった松本です.

松本さんこんにちわ。

:しばらくSOAPからも離れていたのですが,
:実際にSOAPを使ってシステム構築をすることになりました.
:
:以前にサンプルとして書いていただいた
:サーバ側のプログラム(ramdomService.c)を少しいじって,
:他のプログラムをincludeし,
:その中の関数をmain関数の中で用いようとしたところ,
:うまくSOAPによって呼び出すことができませんでした.
:
:matching()という関数を呼び出しているのですが,
:記述する場所によって様々です.
:コンパイルが通らなかったり,
:コンパイルは通っても実行ファイルが実行できなかったり,
:実行ファイルは実行できてもSOAPでクライアントから
:呼び出そうとすると「Object」と返ってくるだけだったり.
:
:何かまずい点があれば教えてください.
:お願いいたします.

このMLに限らず、ML や Netnews 等で質問する場合、
必要十分な情報を提示していただかないと、
適切な回答を得ることは困難だと思います。

MLの他の読者は松本さん自身でも、神様でもないので、
実行環境がどのようなものかも分からないですし、
どのようなコードの時、どのようなエラーが出てコンパイルが
通らなかったか、実行できないとはどのような状況か、
あるいは、実行できるとはどのように実行されるか、
include しているプログラムの内容はどのようなものか、
matching() 関数とは、どのような動作をするものか等、
不明な点が多々あるため、回答する場合、回答者は、
提示された情報のみから、推測して回答するしかなく、
えてして、そのような回答は的外れになる可能性が高いです。
ですから、質問する場合は、情報過多かと思うくらいでもいいですから、
可能な限り提示して頂きたく思います。

今回の場合は、可能ならば、include しているプログラムコードを、
すくなくとも、matching() 関数の仕様なりは提示して欲しいです。

:///////////////////////////////////////////////////////
:
:#include <OpenSOAP/OpenSOAP.h>
:#include <OpenSOAP/Service.h>
:
:#include <stdio.h>
:#include <stdlib.h>
:
:#include "all-number.c"			//新たにincludeしたプログラム
:
:#if !defined(CONNECT_TYPE)
:# define CONNECT_TYPE "cgi"
:#endif /* CONNECT_TYPE */
:
:static
:int
:ServiceFunc(OpenSOAPEnvelopePtr request,
:			OpenSOAPEnvelopePtr *response,
:			void *opt) {
:	OpenSOAPBlockPtr body = NULL;
:	
:	OpenSOAPStringPtr reply = NULL;
:	
:	/* parse request message */
:	
:	/*OpenSOAPEnvelopeGetBodyBlockMB(request, "ramdom", &body);*/ 
:	
:	/* make response */
:	
:	OpenSOAPEnvelopeCreateMB(NULL, NULL, response);
:	OpenSOAPEnvelopeAddBodyBlockMB(*response, "ramdomResponse", &body);
:	OpenSOAPBlockSetNamespaceMB(body, "urn:SOAP_Example_Server", "m");
:
:	OpenSOAPStringCreate(&reply);
:
:	srand((unsigned long)time(NULL));
:	OpenSOAPStringFormatMB(reply,
:				 "item%d",
:				 (int)(10.0 / ((double)RAND_MAX + 1.0) * rand())
:				);
:	OpenSOAPBlockSetChildValueMB(body, "return", "string", &reply);
:
:	OpenSOAPStringRelease(reply);
:	
:	return 0;
:}
:
:int
:main(void) {
:	
:	OpenSOAPServicePtr service = NULL;
:	
:	OpenSOAPInitialize(NULL);
:	
:	OpenSOAPServiceCreateMB(&service, "ramdomService", CONNECT_TYPE, 0);
:	
:	OpenSOAPServiceRegisterMB(service, "ramdom", ServiceFunc, NULL);
:	
:	OpenSOAPServiceRun(service);
:	
:	OpenSOAPServiceRelease(service);
:	
:	OpenSOAPUltimate();
:	
:	matching();		//includeしたプログラム内の関数
:
:	return 0;
:}

今回提示されている情報から推測した場合、
matching() 関数が stdout に出力しているため、
レスポンスメッセージが正常に処理されていない
可能性が高いと思います。

ところで、matching() 関数を main() 関数内で呼び出していますが、
それは、本当に、所望の動作なのでしょうか?
この場合、サービスプログラムが終了するときに実行されることになる
だけで、matching() というサービスが提供されるわけではないです。
ですので、そもそも、どのようなことがやりたいのかも、提示すると、
よいかもしれません。