我的需求: 要做个上传图片的桌面程序,现已有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的示例代码。
我现在使用的技术: 服务器端用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的示例代码。
解决方案 »
- 直接打开包含ActiveX 的网页,可运行, 但怎么放到IIS网站下就不行了呢
- VC2008中如何动态改变菜单的显示文本!
- 出现'void *' differs in levels of indirection from 'bool'错误
- 谁会设置brekeke sip server,实现和4.6版的MSN建立连接?
- 怎样用VC添加窗口过程。。。
- glGenTextures()的问题
- 如何设置CRichEdit控件的值?
- 谁VC中有excpt.h文件,发到我邮箱好吗?送分
- 推荐大家一个软件,快到 http://enter.d2g.com 看看!
- 为什么给0分呢?因为这个问题无人能回答
- (急!!)请教:如何实现SDI多视图(CFormView)中实时分发数据到各个视图的相应控件上并显示出来?
- 求一算法:怎么随机产生一个最高位为1,低位的倒数第二位为0的32位整数?
结贴。