日前服务器罢工!无奈只好重装!系统装完问题也随之而来!原本运行很正常的com+组件出现了些异常!
服务器为2003系统!组件全部是用VB6.0写的!客户端用vb.net 2005写的。
出现的问题是我有部分组件运行正常!有部分在调用具体方法时会提示“一个或多个参数无效”!
在网络上翻了两天始终没有找到方法!望高手指点迷津!不胜感激。

解决方案 »

  1.   

    组件全部是用VB6.0写的!客户端用vb.net 2005写的。 
    是什么意思?
      

  2.   

    能跟踪。
    补充一点。
    假设我的服务器名称叫myserver,ip为192.168.0.10
    如果我连接组件方式用的是机器名"MyServer"运行一切正常。
    连接组件方式用改为"http://192.168.0.10"就好出现“一个或多个参数无效”!
      

  3.   

    应该是没有安装 NETBIOS 协议。你在命令行下执行
    >ping -a 192.168.0.10
    不能取得机器名 MyServer
      

  4.   

    有安装,
    访问http://192.168.0.10/msadc/test.txt也能正常显示。
      

  5.   

    服务器有调试过!用机器名为服务地址可以跟进去!
    也有在服务器上重新编译、注册。
    但问题还是存在!我个人认为是设置问题!并非系统的版本或组件的版本问题!
    也许会是IIS中的设置问题?有没有精通这一块的朋友。
    因为如果用机器名创立组件的链接是不通过IIS的,一切运行正常。
    然而用"http://192.168.0.10"就的通过IIS中转,目前出现问题的也就是这种连接方式下才会出现错误!
      

  6.   

    我说的是
    >ping -a 192.168.0.10
    用 IP 可以直接访问文件,访问 COM+ 组件需要用服务器名,这是两种不同的方式。
      

  7.   

    小弟愚昧,还是不懂!现在将运行命令符回传的语句贴出来!请高手帮忙看看!问题出在哪?
    ping -a 192.168.0.10pinging myserver[192.168.0.10] with 32 bytes of data:
    reply from 192.168.0.10:bytes=32 time<1ms TIL=128
    reply from 192.168.0.10:bytes=32 time<1ms TIL=128
    reply from 192.168.0.10:bytes=32 time<1ms TIL=128
    reply from 192.168.0.10:bytes=32 time<1ms TIL=128ping staristics for 192.168.0.10:
       packets:sent = 4, Received = 4, lost = 0 <0% loss>,
    approximate round trip times in milli-seconds:
       Minimum = 0ms, Maximum = 0ms, Average = 0ms
      

  8.   

    这个才证明有 NETBIOS,访问 http://192.168.0.10/msadc/test.txt 不能证明。
      

  9.   

    再找其他问题:
    1)重装服务器前后 IP 是否没变?
    2)COM+的组件有没有在服务器上重新打包后到客户端安装?
      

  10.   

    :CreateObject(class,[servername])
    的参数 servername 只要一个服务器名称就可以了,没见过带协议的方式 "http://192.168.0.10",换成只有 IP 的 "192.168.0.10" 试试。
      

  11.   

    tiger_zhao
    能否留下联系方式及时沟通!
    或是你加我!
    M S N :saillife  @  163  .com 
    Q  Q:9 8 2 9 2 1 8 4 1  
    请去除空格后加我
      

  12.   

    补充一点在用CreateObject(class,[servername]) 时能够取得连接。是在调用组件的具体方法时弹出“一个或多个参数无效”错误信息,而且有部分组件运行正常,比如我的Login.dll!
    现将我的组件及调用的代码贴出,望对各位高手有所帮助。
    调用函数:
     gobjRDS = CreateObject("RDS.DataSpace")
     objTemp = gobjRDS.CreateObject(gcntComtool_Spec, gcntstrComponentIP)
     grsData = objTemp.GetSysData(SessID, strRetMsg, gint16Val, strLogin, strSite)
     If gint16Val < 0 Then
       Exit Try
     End If'组件
    Public Function GetSysData(ByRef SessID As String, _
                               ByRef strRetMsg As String, _
                               ByRef intRetNum As Integer, _
                               ByVal strLogin As String, _
                               ByVal strSite As String) As ADODB.RecordsetEnd Function
      

  13.   

    对比一下两边的 ADO 版本。
      

  14.   

    Tiger_Zhao兄,ADO 2.7不是通用的吗?
      

  15.   

    ●工程的引用只是保证调用接口的兼容,实际创建的实例可能是更高版本的。
    也就是在服务端实际创建的是 ADO 2.8 的实例,你通过 2.7 的接口调用,正常情况下是没有问题的。
    ●但是看起来你的 ADO 对象要在服务端和客户端进行传递,这样序列化和反序列化的版本必须一致。
    服务端 2.8 对象进行序列化,如果客户端只有 2.7,是无法进行反序列化的。
      

  16.   

    服务端的是2.7,客户端的版本我就无法确定了!是VS2005中自带的adodb.dll。
      

  17.   

    牛头不对马嘴!
    VS.Net 的是 ADOX
    ADO 2.x 的是 msado15.dll
      

  18.   

    tiger,为了求证。我也将.net的程序引用的Dll换成你所说的msado15.dll依然无果!
    我认为问题点应该在服务器(IIS设置、组件服务设置)的设置上!
    毕竟我这个套程序套成熟的程序!com+组件部分,以及与com+组件连接的部分已经两三年没改动过来。
    突然出现问题!应该不会存在于引用组件的版本上!可能是系统版本不同,设置上没有注意到!
    望能帮忙想想,谢谢你这么多天来帮我想了那么多办法。
    系统版本:windows server 2003 standard edition service pack 1
    IIS版本:6.0
      

  19.   

    又:发布后客户端可能要重新编译一下。
    VS.Net 引用 COM 可能还要重新进行导入。
      

  20.   

    是系统安装盘的问题!可能是文件不全或是默认的安全性设置不同。不过这次明确了几件事情,也算值得。
    1.VS.net 中的Adodb.dll与VB6.0中的ADO不论是那个版本都是兼容的,可以传送。所以出现类似问题的朋友就不用往这里边钻了。
    2.如果你希望通过IIS来调用你的组件最好装上NETBIOS协议
    3.建立组件前确保组件全部正确注册。