【求助】关于webservice调用dll的问题

bobi00001 2012-11-12 04:45:37
想实现:
1.webservice调用dll
2.dll 读取ini资料夹获取数据库连线字符串,并创建连线
3.调用dll function 把返回结果作为webservice的返回结果返回。

webservice主要是作为一个参数传递的工具
具体的数据处理是dll完成.

不知道大家听明白我的意思没!我自己有点晕了。。
现在遇到的问题是调用dll可以,但dll加载数据库连线不行!
因为我测试了一个包含数据库连线配置文件的!和一个不包含的!

webservice --> C# Vs2010
Dll --> Delphi7
DB --> oracle10g

以上到底能实现吗?求指点,不然总做无用功。
主要问题文件路径获取?端口?
oracle 1521
webservice也有端口号,是否有冲突?

望大虾指点!先谢了!
分不多,请包含!
...全文
383 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobi00001 2012-11-14
  • 打赏
  • 举报
回复
謝謝各位,現在我先換個測試環境再試試! 還有一個問題!ini資料夾是提供給Dll使用的存放數據庫連線的ini文件。 這個我在發佈是這個Ini文件夾改怎么发布? 假如我的调用路径写的都是绝对路径:"C:\ini", 但我放在C:下发布的时候读取不到该ini文件!这个地方改怎么设置!在本机调试的时候是能访问得到的! 另外dll数据库连线创建的时候还是有问题,现在还没发现问题在哪里!只能在这里求助下大家! 自己也慢慢摸索下,C#还是刚开始用!不是太熟悉!
bobi00001 2012-11-14
  • 打赏
  • 举报
回复

unit Unit1;

interface
uses
  SysUtils,IniFiles,DB, ADODB,ActiveX;

  function SFCInitialize:Integer;
  function SFCClose:Integer;

  function getfileString(AMsg:PChar):Integer;  Cdecl; export;
  function getADOString(AMsg:PChar):Integer;  Cdecl; export;
implementation

var
  ADOConn:TADOConnection;
  ADOtmp:TADOQuery;

function SFCInitialize:Integer;
begin
  ADOConn := TADOConnection.Create(nil);
  ADOConn.LoginPrompt := false;
  ADOConn.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Password=ws;Persist Security Info=True;User ID=ws;Data Source=oraDB';
  //ADOConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\DB.mdb;Persist Security Info=False';
  ADOtmp := TADOQuery.Create(nil);
  ADOtmp.Connection := ADOConn;
  Result := 1;
end;

function SFCClose:Integer;
begin
  ADOtmp.Close;
  ADOConn.Close;
  ADOConn.Free;
  Result := 1;
end;

function getfileString(AMsg:PChar):Integer;
var
tmpstr :string;
IniErrorCode:TIniFile;
begin
  IniErrorCode := TIniFile.Create('C:\Test\' + 'ini\ErrCodeInfo.ini');
  tmpstr := IniErrorCode.ReadString('ErrorList','Test','');
  StrPCopy(AMsg,tmpstr);
  IniErrorCode.Free;
  Result := 1;
end;

function getADOString(AMsg:PChar):Integer;
var
  strSQL,tmpstr:string;
begin
  ADOtmp.Close;
  strSQL:='select fname from tbluser where fid =:fid ';
  ADOtmp.SQL.Text:=strSQL;
  ADOtmp.Parameters.ParseSQL(ADOtmp.SQL.Text,True);
  ADOtmp.Parameters.ParamByName('fid').Value:= '86403985';
  ADOtmp.Open;
  tmpstr := ADOtmp.FieldByName('fname').AsString;
  StrPCopy(AMsg,tmpstr);
  ADOtmp.Close;
end;

initialization
  CoInitialize(nil);
  SFCInitialize;

finalization
  SFCClose;
  CoUnInitialize;

end.
Dll代码。两个function。 一个是验证读取Ini资料夹内的ini文件是否正常。 一个是验证数据库连线的!

[WebMethod]
        public string getiniString()
        {
            byte[] Msg = new byte[50];
            string tmp = string.Empty;
            int i = clsCallDll.getfileString(Msg);
            if (i == 1)
            {
                tmp = System.Text.Encoding.Default.GetString(Msg);
            }
            else
            {
                tmp = "error";

            }
            return tmp;
        }

        [WebMethod]
        public string getADOString()
        {
            byte[] Msg = new byte[50];
            string tmp = string.Empty;
            int i = clsCallDll.getADOString(Msg);
            tmp = System.Text.Encoding.Default.GetString(Msg);
            return tmp;
        }
C# webservice部分代码! 有兴趣的可以研究下,也许问题很简单,但我却没找到。 郁闷了这么久还是没调试成功。 所有还是不这样玩了!自己写webservice直接处理数据,不调用dll处理数据了! 但还是觉得遗憾,理论上很好实现的东西在实际操作中却这么难!? 可能还是自己基础功不够扎实吧! 有研究出来或需要完整调试代码的大侠可以给我发个消息! 谢谢!先结贴吧! 在此谢谢楼上的各位大侠!
ntu_web 2012-11-13
  • 打赏
  • 举报
回复
我也很想知道
kxloveh 2012-11-13
  • 打赏
  • 举报
回复
顶起,没弄过这个啊,帮不了你,帮你顶吧
bobi00001 2012-11-13
  • 打赏
  • 举报
回复
大神。。給點指點。 已經折騰了一個星期了!
aiyongyyy 2012-11-13
  • 打赏
  • 举报
回复
websevice调用dll应该是没问题的,可能是驱动不对或者是环境不对。
枫桦沐阳 2012-11-13
  • 打赏
  • 举报
回复
正在做,完全没有问题,不过我访问但是SQLSERVER
bobi00001 2012-11-13
  • 打赏
  • 举报
回复
是這樣的我只是爲了測試!所有寫了一個不连接数据库的dll接口部分和原dll是一致的! 目的是验证webservice能不能正常呼叫dll. 结果是可以正常呼叫! 但带数据库连接的却不能正常呼叫。我今天又试了下ini文件路径。我都是改成绝对路径。调用还是失败!报错也没有。只是一点function就卡在哪里!这一点是最郁闷的! 好几天了,我都有些晕了。。表达的可能不是太清楚!请见谅!
  • 打赏
  • 举报
回复
webservice访问带连接dll也没有问题,是不是取得的连接字符串不对。 没有创建数据库连接的怎么获取数据?
bobi00001 2012-11-13
  • 打赏
  • 举报
回复
c/s調用Dll是沒有問題的!這個我是測試過的。 webservice訪問不帶數據庫連接的Dll也是正常的!我編譯了兩一個dll,接口完全一樣!一個讀取Ini創建了數據庫連線,一個沒有,沒有的可以通過webservice正常呼叫。 採用webservice傳送數據主要是為了實現跨平臺。 另外現在需要調用的dll也不是我編譯的,我只有接口資料! 不知道有没有大侠遇到过类似的问题!给点提示! 谢谢!
zincy 2012-11-13
  • 打赏
  • 举报
回复
首先应该不是端口问题,orcle服务器般是1521,webservice默认是8000,再说你能在IE中访问webservice就说明不是端口问题。建议你先写个C/S程序来调用dll,如果这样能成功,那么可能是使用了IIS的问题,如果你用的是IIS6和以上版本你要看看,应用程序池是否打开32位应用程序的支持,或者你的IIS是否有权限执行DELPHI的dll.

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧