CF.NET 2.0 通过cmwap访问外部webService

这个帖子本16号放在首页,不知道为何不见了,也许是我误删除了吧,重新补上,放在我自己的首页。

最近在做手机上一程序,需要通过移动cmwap访问外部的webservice,但使用wsdl生成的代理类通过cmwap网关访问会出现"Client found response content type of 'text/vnd.wap.wml',but expected 'text/xml' ".的异常信息,换用cmnet网络则正常。
应该是通过cmwap网关请求返回的数据被转化为wml类型了,wsdl代理类只认xml;
把google翻了也找不到解决方案,只好自己用最笨的办法,用HttpWebRequest和HttpWebResponse实现访问soap协议。

代码如下:

SoapClient
代码说明:
代码原理比较简单,主要是了解Soap1.2的格式和xml操作。
已经在代码中加入了部分注释。下面是一个调用例子
void getwebservice(){
 PostDataArray data = new PostDataArray();
 data.Add("参数1", "参数值1");
 PostDataArray indata = new PostDataArray();
 indata.Add("嵌套参数1","嵌套参数值1");
 indata.ColName = "嵌套节点名称";
 data.Add(indata);

 SoapClient soap = new SoapClient();
 soap.ContentEncoding = Encoding.GetEncoding(65001);
 soap.Proxy = new WebProxy("代理");
 soap.ServiceUrl = new Uri("webService地址");
 soap.TimeOut = 180000;//超时时间(毫秒)
 //用同步方法调用ws,直接返回InvokeResult结果;
 soap.Invoke("webService方法名称", data);

 //用异步方法调用ws,在SoapInvokeCompleted事件中处理结果。
 soap.SoapInvokeCompleted 
    += new SoapInvokeCompletedEventHandler(soap_SoapInvokeCompleted);
 soap.InvokeAsync("webService方法名称", data);
}
posted @ 2007-02-21 18:18  聆听细雨  阅读(5549)  评论(10编辑  收藏  举报