首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

使用WebService中对象反序列化的有关问题

2011-12-15 
使用WebService中对象反序列化的问题这个是c#,.net基本的问题,但是问题来自使用WebService的过程。。。我有一

使用WebService中对象反序列化的问题
这个是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.1Host: 192.168.0.222Content-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "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中,在服务器端自己解析

[解决办法]
探讨
引用:
你可以用C#作个WebService客户端,然后用COM包装,让C,C++用。


这个我现在再试

不过 用COM封装与 对象序列化、反序列化没什么关系吧?

不过我发现了一个 XmlSerializer 可以了。多谢关注。

热点排行