所属分类:.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);
--------------------------------------------------------
学习
--------------------------------------------------------
|
请发表评论