• 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);

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

    学习

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

  • 相关阅读:
    react 封装antd menu组件,路由懒加载,可折叠,可配置显示和隐藏,刷新后选择正确的菜单,打开正确的submenu
    useHistory做页面跳转导航
    react-draft-wysiwyg富文本组件
    html转json json转html
    create-react-app 生成 report.html 可视化打包分析
    axios设置请求头实现post请求发送数据的格式(Form Data)
    url查询参数中的汉字如何解码
    React在body下追加全局组件并实现渲染更新
    Loadrunner-08-增强和优化脚本-检查点
    Loadrunner-06-增强和优化脚本-事务
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/3096696.html
Copyright © 2020-2023  润新知