这个是c#,.net基本的问题,但是问题来自使用WebService的过程。。。
我有一个 Web Service方法:
- C# code
public string SaveJinChengJiLu(ProcessInfoRecord[] pirArray);
WebService document内容提到 SOAP 1.1 请求时,发送格式如下:
- XML code
POST /ChkService/Receiver.asmx HTTP/1.1 Host: 192.168.0.222 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://www.tempurl.com/SaveJinChengJiLu" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <AuthHeaderCS xmlns="http://www.tempurl.com/"> <UserID>string</UserID> <Password>string</Password> </AuthHeaderCS> </soap:Header> <soap:Body> <SaveJinChengJiLu xmlns="http://www.tempurl.com/"> <pirArray> <ProcessInfoRecord> <RecordID>int</RecordID> <TaskWorkingID>string</TaskWorkingID> <ProcessName>string</ProcessName> <ProcessAddress>long</ProcessAddress> <ProcessID>int</ProcessID> <IsHidden>int</IsHidden> <Signature>int</Signature> <ProcessPath>string</ProcessPath> </ProcessInfoRecord> <ProcessInfoRecord> <RecordID>int</RecordID> <TaskWorkingID>string</TaskWorkingID> <ProcessName>string</ProcessName> <ProcessAddress>long</ProcessAddress> <ProcessID>int</ProcessID> <IsHidden>int</IsHidden> <Signature>int</Signature> <ProcessPath>string</ProcessPath> </ProcessInfoRecord> </pirArray> </SaveJinChengJiLu> </soap:Body> </soap:Envelope>
重点是 pirArray 节的内容
.Net框架通过一个我不知道的方法 把 上述数据构造了一个 ProcessInfoRecord 数组类型的 对象 pirArray
我的客户端程序是用 sproxy.exe 生成的 .h文件
这里产生的问题是,增加一个类别就增加一个webservice方法,管理起来很累人。
因为该工具有个bug,不知道什么样的方法名字符序列会导致sproxy.exe生成不了正确的 .h
所以我想,只用一个下面的接口
public string SaveData(int type, string xmlStr);
xmlStr为客户端拼接的串,这个应该是 ProcessInfoRecord [] 类型对象的序列化内容,然后通过一个我现在想要询问的一个方法给反序列化,最终生成对象 ProcessInfoRecord []pirArray;
请问有没有方法可以直接利用pirArray 的结构?如何反序列化?
这个不行的话,有其他方法吗?谢谢
------解决方案--------------------
这个问题我也遇见过,的确是,每添加一个类别WS就会多出一个对应的代理类,你还得为新类别写新的方法
而且序列化是需要类别,如果你传递通用XML string,到了服务器端没有对应的类别无法序列化。
你可以采用这样通用的方式public string SaveData(int type, DataSet xmlStr);
DataSet是微软WS通用的格式,你可以把数据保存在DataSet中,在服务器端自己解析
------解决方案--------------------