有这样几个WebSvc
http://vaspos.brd.sl.ca/services/authSympUser.xf
http://vaspos.brd.sl.ca/services/getCustomerProfile.xf1。 最初尝试用最简单的方法,  找到wsdl, 直接生成 SoapHttpClientProtocol的派生类 调用。
    发现无法获取返回     于是sniffer,  发现它的返回:
------------------------------------------
HTTP/1.1 500 Internal Server ErrorDate: Sat, 01 Jul 2006 03:46:57 GMTServer: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7a Resin/3.0.13Connection: closeTransfer-Encoding: chunkedContent-Type: text/xml; charset=UTF-8 15d<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><authSympUserResponse><requestInfo></requestInfo><responseInfo><responseCode>99</responseCode><responseDescription>Remote address not allowed.</responseDescription></responseInfo></authSympUserResponse></soap:Body></soap:Envelope>
------------------------------------------
虽然SOAP返回了  但是始终是一个500错误 我想这就是为什么无法获取返回值的原因和WebSvc那边联系, 得知“Java可以调用,是有一个500错误, 无关紧要”2. 改用 HttpWebRequest WebRequest忽略掉那个500错误response = (HttpWebResponse)e.Response;
responseStream = response.GetResponseStream();
buf = new byte[10240]; // 这个缓存区已经足够大了
responseStream.Read( buf, 0, buf.Length);
string xml = encoding.GetString( buf, 0, buf.Length);这样做基本上可以了,可是还是有问题, 返回的SOAP XML有时候很长
4000-6000 byte,  TCP协议把它拆包了, 既一个SOAP的response 被拆分成了2个以上的数据包返回
responseStream.Read( buf, 0, buf.Length);  读取的是第一个包的数据 (sniffer分析得来)
3.  改用TcpClient,  直接控制Tcp调用.
一切都很顺利,  但是我用的是.Net1.1  没有SslStream这个东西。   所以不能调用https的WebSvc如果我要调用https的WebSvc,那么我只能在socket层自己做
或者使用3rd的封装库所以这问题搞来搞去就是没彻底解决。  请支招  谢谢

解决方案 »

  1.   

    to 我用的是.Net1.1 没有SslStream这个东西。 所以不能调用https的WebSvc参看
    http://www.microsoft.com/china/technet/security/guidance/secmod28.mspx
      

  2.   

    按说第一种方法是可以的,也是最简单的。至于会报500错误,应该是webservice写得有问题,看看这方面是否能避免。
      

  3.   

    谢谢楼上
    开始 你这种方法:http://www.microsoft.com/china/technet/security/guidance/secmod28.mspx
    就是我的第一种啊有没有.Net1.1下 在TCP层以下的SSL解决方法?