我的需求: 要做个上传图片的桌面程序,现已有WEB上传方式(JSP)。
   我现在使用的技术: 服务器端用JAVA平台,AXIS2 提供SOAP服务,这样能很好的与现在上传业务代码集成;
客户端用VC语言,使用Microsoft SOAP Toolkit 3.0 工具包。
   现在的问题: 不能上传带附件的SOAP包。
   相关情况: 简单的SOAP调用没有问题, JAVA写的客户端也可以上传附件。后来用gSoap、Axis2/C试了也搞不定,花了两个星期、搜索了无数次,请高手帮忙!
   或者提供其他解决方案也行,如改VC用Delphi、改用gSoap或Axis2/C。 个人不太想用Http Post的方式。
   现在的VC程序代码:char* ThSoap::upload(const char* filename, const char* filePath)
{
        HRESULT hr;
   ISoapSerializerPtr Serializer;
   ISoapReaderPtr Reader;
   ISoapConnectorPtr Connector;
        IMessageComposerPtr Composer;  // Connect to the service.
   Connector.CreateInstance(__uuidof(HttpConnector30));
   Connector->Property["EndPointURL"] = soapURL;
        Connector->Connect();        hr = Serializer.CreateInstance(__uuidof(SoapSerializer30));
        if(FAILED(hr))
                return "FAILED: pSerializer.CreateInstance ";        hr = Composer.CreateInstance(__uuidof(DimeComposer30));
        if(FAILED(hr))
                return "FAILED: Composer.CreateInstance";//        Composer->Initialize( "C:\tmp", 15,8);   // Begin the message.
//   Connector->Property["SoapAction"]= soapURL;  
   Connector->BeginMessage();
   // Create the SoapSerializer object.
   Serializer.CreateInstance(__uuidof(SoapSerializer30));
   // Connect the serializer object to the input stream of the connector object.
        Serializer->InitWithComposer(
                _variant_t((IUnknown*)Connector->InputStream), Composer);
//  Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));   // Build the SOAP Message.
   Serializer->StartEnvelope("","","");
   Serializer->StartBody("");
   Serializer->StartElement("upload","","","");//fileContent
  IFileAttachmentPtr FileAttach;
  hr = FileAttach.CreateInstance(__uuidof(FileAttachment30));
  if( FAILED(hr) )
        return "Cannot create MSSOAP.FileAttachment30";
        CString FileName = _T("C:\\a.txt");
        FileAttach->FileName= _bstr_t(FileName); //>FileName= "t3.res";
        FileAttach->Property["DimeTNF"]= "media-type";
        FileAttach->Property["DimeType"]= "text/xml";   Serializer->StartElement("fileContent","","","");
   Serializer->AddAttachment(FileAttach);
   Serializer->EndElement();   Serializer->StartElement("filename","","","");
   Serializer->WriteString(filename);
   Serializer->EndElement();   Serializer->EndElement();
   Serializer->EndBody();
   Serializer->EndEnvelope();   // Send the message to the XML Web service.
        Connector->EndMessage();   // Read the response.
   Reader.CreateInstance(__uuidof(SoapReader30));   // Connect the reader to the output stream of the connector object.
   Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");        return "FAIL";
}执行到   Serializer->EndEnvelope(); 时报错停了,VC又不像JAVA般有异常信息,也不知什么原因。 而微软的文档中只有VB的示例代码。