• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi调用C#WEB服务,参数传递问题(转)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

所属分类:.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);

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

学习

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
初识Matlab及界面认识发布时间:2022-07-18
下一篇:
MATLAB 学习笔记 3发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap