VC++ 6.0 中怎么通过SOAP接收附件(文件)???

aicai 2006-04-19 06:16:10
我已经实现了调用Web Service ,可以通过http调用外部的Web Service,这样可以把一些计算放置到外部实现,对于接收字符串是没有问题的,但是如何接收文件呢???
...全文
361 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
布学无数 2006-05-09
  • 打赏
  • 举报
回复
mark
aicai 2006-05-07
  • 打赏
  • 举报
回复
没有知道吗?
umbrella1984 2006-04-25
  • 打赏
  • 举报
回复
也想知道这个问题,帮顶,另外楼主下文件是可通过CHttpFile来完成?
T97102003 2006-04-25
  • 打赏
  • 举报
回复
学习
fhqiplj 2006-04-25
  • 打赏
  • 举报
回复
soapkit
aicai 2006-04-20
  • 打赏
  • 举报
回复
那位兄弟知道吗?
aicai 2006-04-20
  • 打赏
  • 举报
回复
谢谢,不过上面都已经实现了,我只是想实现下载附件的功能,VB的程序是有的,但是VC的功能没有实现,贡献一下VB的做法:

Private Function DownLoadFile() As String
Dim Serializer As SoapSerializer30
Dim Reader As SoapReader30
Dim ResultElm As IXMLDOMElement
Dim FaultElm As IXMLDOMElement
Dim Connector As SoapConnector30
Dim Parser As DimeParser30
Dim RcvdAttachments As MSSOAPLib30.IReceivedAttachment

Set Connector = New HttpConnector30
Connector.Property("EndPointURL") = txtUrl.Text
Connector.Connect

Connector.Property("SoapAction") = txtNamespace.Text + txtMethod.Text
Connector.BeginMessage

Set Serializer = New SoapSerializer30
Serializer.Init Connector.InputStream

Serializer.StartEnvelope
Serializer.StartBody
Serializer.StartElement txtMethod.Text, txtNamespace.Text
Serializer.EndElement
Serializer.EndBody
Serializer.EndEnvelope

Serializer.Finished

Connector.EndMessage

Set Reader = New SoapReader30
Set Parser = New DimeParser30

If Reader.LoadWithParser(Connector.OutputStream, Parser) Then
Set RcvdAttachments = Reader.Attachments.Item(0)
RcvdAttachments.SaveToFile "C:\downloaded.txt"
DownLoadFile = "OK"
Else
DownLoadFile = "no attachment"
End If
End Function

在此拜托兄弟怎么翻译下面的语句到VC来,

If Reader.LoadWithParser(Connector.OutputStream, Parser) Then
Set RcvdAttachments = Reader.Attachments.Item(0)
RcvdAttachments.SaveToFile "C:\downloaded.txt"
DownLoadFile = "OK"
Else
DownLoadFile = "no attachment"
End If
vc_asm 2006-04-20
  • 打赏
  • 举报
回复
vb----------------------------------------------------------------------
Private Const END_POINT_URL = _
"http://localhost/DocSample2/DocSample2.asp"
Private Const CALC_NS = "uri:Calc"

Private Function Execute(ByVal Method As String, _
ByVal A As Double, _
ByVal B As Double) As Double

Dim Serializer As SoapSerializer
Dim Reader As SoapReader
Dim ResultElm As IXMLDOMElement
Dim FaultElm As IXMLDOMElement
Dim Connector As SoapConnector

Set Connector = New HttpConnector
Connector.Property("EndPointURL") = END_POINT_URL
Connector.Connect

Connector.Property("SoapAction") = "uri:" & Method
Connector.BeginMessage

Set Serializer = New SoapSerializer
Serializer.Init Connector.InputStream

Serializer.startEnvelope
Serializer.startBody
Serializer.startElement Method, CALC_NS, , "m"
Serializer.startElement "A"
Serializer.writeString CStr(A)
Serializer.endElement
Serializer.startElement "B"
Serializer.writeString CStr(B)
Serializer.endElement
Serializer.endElement
Serializer.endBody
Serializer.endEnvelope

Connector.EndMessage

Set Reader = New SoapReader
Reader.Load Connector.OutputStream

If Not Reader.Fault Is Nothing Then
MsgBox Reader.faultstring.text, vbExclamation
Else
Execute = CDbl(Reader.RPCResult.text)
End If

End Function
vc-------------------------------------------------------------------------------
#include "stdafx.h"
#include <stdio.h>

#import "msxml3.dll"
using namespace MSXML2;

#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap1.dll" \
exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \
"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib;

void Add()
{

ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;

// Connect to the service
Connector.CreateInstance(__uuidof(HttpConnector));
Connector->Property["EndPointURL"] = "http://localhost/DocSample2/DocSample2.asp";
Connector->Connect();

// Begin message
Connector->Property["SoapAction"] = "uri:AddNumbers";
Connector->BeginMessage();

// Create the SoapSerializer
Serializer.CreateInstance(__uuidof(SoapSerializer));

// Connect the serializer to the input stream of the connector
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// Build the SOAP Message
Serializer->startEnvelope("","","");
Serializer->startBody("");
Serializer->startElement("Add","uri:Calc","","m");
Serializer->startElement("A","","","");
Serializer->writeString("5");
Serializer->endElement();
Serializer->startElement("B","","","");
Serializer->writeString("10");
Serializer->endElement();
Serializer->endElement();
Serializer->endBody();
Serializer->endEnvelope();

// Send the message to the web service
Connector->EndMessage();

// Let us read the response
Reader.CreateInstance(__uuidof(SoapReader));

// Connect the reader to the output stream of the connector
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");

// Display the result
printf("Answer: %s\n", (const char*)Reader->RPCResult->text);

}

int main()
{
CoInitialize(NULL);
Add();
CoUninitialize();

return 0;

}
msdn上有例子--------------------------------------------------------------

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧