ASP.NET网页设计Oralce 挪用Delphi写DLL往会见C# WebSe...
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。web|会见|成绩我想从Oracle的存储历程经由过程一个内部dll(Delphi编写)往会见C#写的WebService时,呈现了“还没有挪用CoInitialize”不晓得是怎样回事,看列位指导一二。
1、我在Oracle里写了一个函数AddNumber以下:
CREATEORREPLACEFUNCTION"MY"."ADD"(ainBINARY_INTEGER,b
inBINARY_INTEGER)RETURNBINARY_INTEGERAS
EXTERNALLIBRARYMY_LIB
NAME"AddNumber"
LANGUAGEC;
2、写了一个历程AddTest以下:
CREATEORREPLACEPROCEDURE"MY"."ADDTEST"(ain
BINARY_INTEGER,binBINARY_INTEGER)
as
retValBINARY_INTEGER;
begin
retVal:=Add(a,b);
end;
3、创立了MY_LIB包:
CREATEORREPLACELIBRARYMY_LIBASC:oracleora92inMyWebservice.dll;
4、在Delphi里创立了一个MyWebservice.dll,并拷贝其到$ORACLE_HOME$BIN目次下,个中有一个办法:
interface
functionAddNumber(a:integer;b:integer):Integer;cdecl;
....
implementation
procedureDoGetWebServiceErr(ErrMsg:string);
var
logFile:TextFile;
i:integer;
begin
AssignFile(logFile,d: est.txt);
try
Rewrite(logFile);
Write(logFile,ErrMsg);
finally
CloseFile(logFile);
end;
end;
functionAddNumber(a:integer;b:integer):Integer;
begin
try
Result:=GetMyWebServiceSoap().AddNumber(a,b);
except
onE:ExceptiondoDoGetWebServiceErr(E.E.Message);
else
Result:=-1;
end;
end;
.....
个中:GetMyWebServiceSoap()是我用WSDLImporter导进天生的MyWebService.pas中的一个办法。
我在该Dll的项目文件里导出了该办法:
exports
AddNumber;
5、用C#在Localhost创立了一个名为MyWebService的WebService,个中有一个名为AddNumber的WEB办法,其界说以下:
publicintAddNumber(inta,intb)
{
returna+b;
}
6、我用c#写了一个WindowsForm客户端,经由过程挪用下面用Delphi写的dll,测试该Web办法,测试乐成
privateexternstaticintAddNumber(inta,intb);
......
///测试按钮
privatevoidbuttonTestWebService_Click(objectsender,System.EventArgse)
{
Consle.Write(AddNumber(1,2));
}
7、在SQL*Plus里测试失利,翻开Test.txt文件内容为“还没有挪用CoInitialize”,测试代码以下
EXECUTEAddtest(1,1);
假如将Delphi中的AddNumber修正为
functionAddNumber(a:integer;b:integer):Integer;
begin
try
Result:=a+b;//不挪用WebService,间接盘算
except
onE:ExceptiondoDoGetWebServiceErr(E.E.Message);
else
Result:=-1;
end;
end;
实行则乐成。
Oracle的Listener.ora和tnsnames.ora的设置以下
#LISTENER.ORANetworkConfigurationFile:C:oracleora92
etworkadminlistener.ora
#GeneratedbyOracleconfigurationtools.
MY_EXTPROC_LISTENER=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=ipc)
(KEY=extproc)
)
)
SID_LIST_MY_EXTPROC_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=extproc)
(ORACLE_HOME=C:oracleora92)
(PROGRAM=C:oracleora92inextproc)
(ENVS="EXTPROC_DLLS=ANY")
)
)
#TNSNAMES.ORANetworkConfigurationFile:C:oracleora92
etworkadmin nsnames.ora
#GeneratedbyOracleconfigurationtools.
EXTPROC_CONNECTION_DATA.WORLD=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=extproc))
(CONNECT_DATA=
(SID=extproc)
)
)
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。 ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
页:
[1]