论腐女脑洞辩论题有多大啊哈哈哈哈哈

我写了一个c++的webservice程序,想调用接口函数,接受一个.zip的压缩包,但是我不知道怎么保存流文件。_百度知道
我写了一个c++的webservice程序,想调用接口函数,接受一个.zip的压缩包,但是我不知道怎么保存流文件。
我写了一个c++的webservice程序,想调用接口函数,接受一个.zip的压缩包,目前已经可以接收文件数据流了,但是我不知道怎么保存流文件。
以下是接收的代码
Reader-&Load(_variant_t((IUnknown*)Connector-&OutputStream), &&);
printf(&%s&, (_bstr_t)Read...
看你的这个text类型貌似就是char *,直接保存成文件就可以了。
为您推荐:
等待您来回答怎么用xfire调用别人的一个webservice接口呢 - ITeye问答
别人给我一个webservice接口,让我去调用,给他发送一段xml文件,他给我返回一段xml文件,怎么写呢
问题补充:javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing '- WSDL Document -'.: java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at org.codehaus.xfire.client.Client.&init&(Client.java:235)
at org.codehaus.xfire.client.Client.&init&(Client.java:246)
at com.test.Test.main(Test.java:23)
Caused by: java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence.
at org.apache.xerces.impl.io.UTF8Reader.invalidByte(Unknown Source)
at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
... 5 more
问题补充:我是这么获取的文本啊
private static String getXml() throws UnsupportedEncodingException{
StringBuffer sb = new StringBuffer();
sb.append("&?xml version=\"1.0\" encoding=\"utf-8\"?&");
sb.append("&infos&");
&&& sb.append("&info&");
&&& sb.append("&EdiID&123456&/EdiID&");
sb.append("&/info&");
&&& sb.append("&/infos&");
&&& return sb.toString();
问题补充:public class Test {
public static void main(String[] args) {
String serivceURL = "http://test.asmx";
Client client = new Client(new URL(serivceURL));
client.setProperty(Channel.USERNAME, "aaa");
client.setProperty(Channel.PASSWORD, "bbb");
//Object[] params = {"",""};// 如果有参数就按顺序写 没参数就 params = {};
Object[] params = new Object[1];
params[0] = getXml();
Object[] res = {};
res = client.invoke("AddInfo", params);
for (Object object : res) {
System.out.println(object.toString());
} catch (Exception e) {
e.printStackTrace();
问题补充:上面贴的是调用代码
构建SOAP文件可以使用JAVA底层提供的支持类。
public SOAPMessage createMessage(String target, String... values) {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage msg = mf.createMessage();
SOAPPart sp = msg.getSOAPPart();
SOAPEnvelope envelope = sp.getEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement node2 = body
.addChildElement(new QName(
"http://www.w3.org/2001/XMLSchema-instance",
target, "ns1"));
for (int i = 0; i & values. i++) {
String value = values[i];
node2.addChildElement("param" + i).addTextNode(value);
msg.writeTo(System.err);
msg.saveChanges();
} catch (Exception e) {
e.printStackTrace();
// 一般要进行错误处理,这里省略
java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence.
一般这个错误是第一个字符出现了非法字符& 如全角的空格或<& 试着删除可疑字符
XML文件用记事本 "另存为 "的时候选择 "编码 "为UTF-8保存
ResourcesService rs =&
Service service = new ObjectServiceFactory()&
&&&&&&&&&&& .create(VDSLResourceService.class);&
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory&
&&&&&&&&&&& .newInstance().getXFire());&
String url = "http://localhost:8080/services/VDSLResourcesService";&
&&& rs = (ResourcesService) factory.create(service, url);&
} catch (MalformedURLException e) {&
&&& e.printStackTrace();&
&&&&&& List&User& userList = rs.getAllUsers(params);&
已解决问题
未解决问题& & & &因为最近的项目中需要运用到在MFC程序中调用WebService里面集成好了的函数,所以特意花了一天的时间来研究WebService的构建以及如何在MFC的程序中添加Web引用,进而来实现在C++ MFC中调用那些WebService中写好的函数,中间也是遇到了一些不懂和不解的地方,好在通过度娘上的一些资料和自己的研究逐一的解决了,写这篇文章的主要目的是,第一:让自己记得更清楚,也方便以后不记得了可以及时回想起来。第二:让其他的一些和我碰到一样问题的朋友能更好的解决此问题。内容仅供参考,如有不对之处希望大家提出来一起交流。
第一部分:WebService的创建
首先,打开VS2005,&File-&New-&Project|Visual C#|ASP.NET Web Service Application&,新建一个名称为&MyWebService&的应用程序。
接下来,你可以在新建的工程文件中修改代码,你可以将[WebService(Namespace = "http://tempuri.org/")]中的tempuri.org改为你的IP地址或域名地址目录,你也可以在类里面添加新的代码,如下所示。
using System.D
using System.W
using System.C
using System.Web.S
using System.Web.Services.P
namespace MyWebService
/// &summary&
/// Summary description for Service1
/// &/summary&
[WebService(Namespace = "http://192.168.22.36/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
[WebMethod(Description = "Default Function")]
public string HelloWorld()
return "Hello World";
// 新添加的方法
[WebMethod(Description = "My Sample Function")]
public int Sum(int a, int b)
return a+b;
接下来,你可以debug运行一下你现在的程序,可以看到现在的效果是这样的。
点击"Sum"超链接,跳转到下一个页面。
在编辑框中输入a = 10,b = 100,点击调用,就可以看到XML格式返回的WebService结果。
到这里,就说明我们的Web Service的环境没有问题。接下来,我们要做的就是把我们建立好的Web Service发布到iis服务器上去。
第二部分:WebService的发布
首先,你可以在你自己的桌面新建一个文件夹(SampleWebService),这里有一个地方需要注意,我们需要右键点击文件夹属性,选择安全tab页,在安全页下面点击&编辑&,然后在弹出的页面里面添加EveryOne的组或用户名(EveryOne的SYSTEM的权限全部勾选允许)。
设定完后的图片如下:
然后,进入到你第一步过程中新建好的WebService程序,选择Release编译环境,在&Solution Explorer&下面选择你的WebService程序&MyWebService&,点击右键选择&Publish&,弹出&Publish Web&对话框,在弹出的对话框中设置&Target Location&为你刚才新建的文件夹&SampleWebService&的路径,点击&Publish&按钮,如下图所示。
接下来,我们来到&Internet信息服务(IIS)管理器&,点击网站右键选择&添加网站&,在弹出的&添加网站&对话框中设置&网站名称&为SampleWebSite,物理路径为我们上面新建的文件夹的路径(也就是C:\Users\Administrator\Desktop\SampleWebService),&端口号&为避免重复,我们可以把它修改为8081,点击&确定&按钮,如下图所示。
接下来,我们双击&Sample Website主页&下面的&目录浏览&,点击启用。
接下来,我们来到&应用程序池&,选中我们新建号的应用程序池&SampleWebSite&,点击右键选中&高级设置&,在弹出的高级设置对话框中将&启用32位应用程序&设置为True。
到这里,我们的WebService就发布完成了。你可以点击iis管理器右手边的&浏览网站&下面的&浏览*:8081(http)&来看一下你的WebService是否发布成功,发布成功的话会显示如下页面。
第三部分:调用WebService
首先,我们新建一个Win32应用程序&Sample&。然后进入应用程序,在&Solution Explorer&下面选择你的Win32应用程序&Sample&,点击右键选择&Add Web Reference&,弹出&Add Web Reference&对话框,在弹出的对话框中设置&URL&为我们在第二部分中发布的链接&http://localhost:8081/Service1.asmx&,设置&Web reference name&为SampleRefer,点击&Add Reference&按钮,如下图所示。
执行完这步以后,我们可以看到应用程序中多出来了几个文件。
接下来,我们在Sample.cpp中添加如下代码。
#include "stdafx.h"
#include &stdio.h&
#include "WebService.h"
using namespace Service1;
int _tmain(int argc, _TCHAR* argv[])
// 初始化com组件运行环境
::CoInitialize(NULL);
// 如果第八行没有命名空间Service1
// 这里可以写成Service1::CService1 ws
int nNum1 = 10;
int nNum2 = 100;
int nSum = 0;
HRESULT hr = ws.Sum(nNum1, nNum2, &nSum);
printf("The Sum of the two num is:%d\n",nSum);
getchar();
运行程序,我们可以得到下面的结果。
至此,我们的C++程序中调用WebService的整个实现过程都介绍完毕,对于MFC的应用程序,和Win32的应用程序的实现代码没有什么区别,这里我们就不多做介绍。对于我来说,过程中主要遇到的问题主要还是在WebService发布到iis上时的一些环境的配置不是很准确,例如发布的时候我们必须Release编译环境,必须设置Everyone的权限等。还有就是写代码的时候不是像我们调用类里面的函数一样去调用WebService中的函数,我们要做一个com组件的初始化,为了方便要定义命名空间,调用的函数有一个HRESULT类型的返回值等等。最后还是希望大家可以相互学习吧,有什么不对的地方一起讨论。
阅读(...) 评论()

我要回帖

更多关于 脑洞大爆炸 的文章

 

随机推荐