zoukankan      html  css  js  c++  java
  • delphi调用C# WEB服务,参数传递问题 (转)

    所属分类:.NET技术 Web Services
    ----------------------------------------------------------------------

    服务端:
      public NetDiskWebSrv () {

           //如果使用设计的组件,请取消注释以下行 
           //InitializeComponent(); 
       }

       [WebMethod]
       public string HelloWorld() {
           return "Hello World";
       }
       [WebMethod]
       public void RegistServerInfo(string GUID,string strCompanyName,string strSoftVersion,string strHostIP)
       {
           //----------------------------------------
           string strSQL = "select * from NetDiskServerInfo Where GUID=’"+GUID+"’";
           PubClass TmpPub = new PubClass();
           try
           {
               if (TmpPub.RecordExist(strSQL))
               {
                   strSQL = "update NetDiskServerInfo set CompanyName=’" + strCompanyName + "’,SoftVersion=’" + strSoftVersion + "’,";
                   strSQL = strSQL + "ServerUrl=’" + strHostIP + "’,UpdateTime=’" + DateTime.Now + "’ where GUID=’" + GUID + "’";
               }
               else
               {
                   strSQL = "insert into NetDiskServerInfo ([GUID],CompanyName,SoftVersion,ServerUrl,UpdateTime)";
                   strSQL = strSQL + "values(’" + GUID + "’,’" + strCompanyName + "’,’" + strSoftVersion + "’,’" + strHostIP + "’,’" + DateTime.Now + "’)";
               }
               TmpPub.ExcuteSQL(strSQL);
           }
           finally
           {
               
           }
       }
    //------------客户端---
    var
     ProxySrv:NetDiskWebSrvSoap;
     sGUID,sHost,sCompany,sVersion:widestring;
    begin
     sGUID:=edtGUID.Text;
     showmessage(sGUID);
     sHost:=edtstrHostIP.Text;
     sCompany:=edtstrCompanyName.Text;
     sVersion:=edtstrSoftVersion.Text;
     ProxySrv:=(httpRIOMain as NetDiskWebSrv.NetDiskWebSrvSoap);
     //ShowMessage(ProxySrv.HelloWorld);
     try
    // ProxySrv.RegistServerInfo(Pchar(sGUID),Pchar(sCompany),Pchar(sVersion),Pchar(sHost));
    ProxySrv.RegistServerInfo(’sdfsdfsdf’,’sdfsdfsdf’,’eeee’,’dfsdfsdfdf’);
     except
       Application.MessageBox(’WEB服务调用失败!’, ’WEB服务调用提示’, MB_OK +
         MB_ICONSTOP);

     end;
    ----------------------------------------
    服务端调试通过,调用HelloWorld正确
    调用 RgistServerInfo时,传到服务端的参数都变成了null,将参数改成pchar类型,仍然失败.
    求教大吓们...........
    (开发环境:D7+VS2005)

    ----------------------------------------------------------------------

    也就是D的字符串类型发到NET这边都变成了NULL?D不是要先引用WSDL文件的吗?引用下来的文件转成D的时候是什么数据类型的呢?

    --------------------------------------------------------

    是的,D到NET就变成null
    引用WSDL文件后,文件参数类型为WIDESTRING

    --------------------------------------------------------

    哪你转换成WIDESTRING传下看行不行?

    --------------------------------------------------------

    试过,仍然不行

    --------------------------------------------------------

    问题已解决,方法如下:
    这是因为VS2005 默认是用的 SoapDocumentProtocol而Delphi 是

    使用的 SoapRpcProtocol.这会造成所以客户端传过去的字符串变

    了null.现在一般的做法是
    在DELPHI的 INITIALIZATION 部分加入下边的代码:
    InvRegistry.RegisterInvokeOptions(TypeInfo(这里是你的接口

    名), ioDocument);

    --------------------------------------------------------

    在INITIALIZATION 部分加上一句:
      InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);

    --------------------------------------------------------

    学习

    --------------------------------------------------------

  • 相关阅读:
    LaunchScreen.storyboard 换了图片 不能更改过来 解决方案
    iOS Google 地图 集成详解
    Mac下 使用git clone 代码慢解决方案
    iOS 函数式编程
    iOS [self class] 、 [self superclass]、 [super class] 、[super superclass] 几种情况对比
    iOS 链式编程-Block 作为放回值
    iOS block的变量捕获(capture)
    iOS Block本质探究
    iOS 读写操作 处理 pthread_rwlock dispatch_barrier_async
    iOS atomic 和 nonatomic 区别
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/3096696.html
Copyright © 2011-2022 走看看