webservicec语言,c语言调用webservice接口

本文目录一览:

怎么在c语言中用socket的方式调用webservice

可以实现,先connect

sockaddr_in server;

if (m_bSockConnected)

{

return TRUE;

}

server.sin_addr.s_addr = inet_addr(m_szHost);

server.sin_family = AF_INET;

server.sin_port = htons((UINT)m_nPort);

if(connect(m_socket, (struct sockaddr*)server, sizeof(server)) == SOCKET_ERROR)

{

m_bSockConnected = FALSE;

m_nLastErrorNo = WSAGetLastError();

MessageBox(0, “请检网络和服务器”, “网络连接错误”, 0);

return FALSE;

}

else

{

m_bSockConnected = TRUE;

}

int timeout=30;

setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)timeout, sizeof(int));

然后再发送url

char requestHeader[1024]= {0};

char nBuf[36] = {0};

strcpy(requestHeader, “PUT “);

strcat(requestHeader, szUrl);

strcat(requestHeader, “Content-Length=”);

_ui64toa(contentLength + 8, nBuf,10); //额外加了传输完成头的长度是8 strlen(SEND_END_STRING)

strcat(requestHeader, nBuf);

strcat(requestHeader, “FileCount=”);

ltoa(fileCount,nBuf, 10);

strcat(requestHeader, nBuf);

strcat(requestHeader,” HTTP/1.1\r\nContent-Length: “);

_ui64toa(contentLength + 8, nBuf, 10);

strcat(requestHeader,nBuf);

strcat(requestHeader,”\r\nHost: “);

strcat(requestHeader,m_szHost);

strcat(requestHeader,”:”);

itoa(m_nPort,nBuf,10);

strcat(requestHeader,nBuf);

strcat(requestHeader,”\r\nAccept: */*;\r\nAccept-Encoding: gzip,deflate\r\nKeep-Alive: 60000\r\nConnection: keep-alive\r\n\r\n”);

//MessageBox(0, requestHeader, “info”, 0);

char * szUTF8 = NULL;

BOOL bRet = FALSE;

bRet = CCharTransLib::EncodeToUTF8(requestHeader,szUTF8);

if (bRet)

{

if ( (int)strlen(szUTF8) != send(m_socket, szUTF8, strlen(szUTF8), 0))

{

m_nLastErrorNo = GetLastError();

bRet = FALSE;

}

if (szUTF8)

{

delete []szUTF8;

szUTF8 = NULL;

}

}

以上是从我工程里面摘的,可能有些变量楼主编译不过去,但基本思想就是这样的

如何用c语言实现基于http的webservice

package com.yudun.test;

import java.rmi.RemoteException;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.message.PrefixedQName;

import org.apache.axis.message.SOAPHeaderElement;

import com.cezanne.golden.user.Exception;

import com.cezanne.golden.user.UserManagerServiceProxy;

import javax.xml.namespace.QName;

import java.net.MalformedURLException;

import javax.xml.rpc.ServiceException;

import javax.xml.soap.Name;

import javax.xml.soap.SOAPException;

public class testWebService {

public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException

{

//标识Web Service的具体路径

String endpoint = “WebService服务地址”;

// 创建 Service实例

Service service = new Service();

// 通过Service实例创建Call的实例

Call call = (Call) service.createCall();

//将Web Service的服务路径加入到call实例之中.

call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置

// 由于需要认证,故需要设置调用的SOAP头信息。

Name headerName = new PrefixedQName( new QName(“发布的wsdl里的targetNamespace里的url”, “string_itemName”) );

org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);

header.addTextNode( “blablabla” );

call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(“发布的wsdl里的targetNamespace里的url”, “SoapHeader”);

// soapHeaderElement.setNamespaceURI(“发布的wsdl里的targetNamespace里的url”);

// try

// {

// soapHeaderElement.addChildElement(“string_itemName”).setValue(“blablabla”);

// }

// catch (SOAPException e)

// {

// e.printStackTrace();

// }

// call.addHeader(soapHeaderElement);

//调用Web Service的方法

org.apache.axis.description.OperationDesc oper;

org.apache.axis.description.ParameterDesc param;

oper = new org.apache.axis.description.OperationDesc();

oper.setName(“opName”);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg0”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg1”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg2”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

oper.setReturnType(new javax.xml.namespace.QName(“, “string”));

oper.setReturnClass(java.lang.String.class);

oper.setReturnQName(new javax.xml.namespace.QName(“”, “return”));

oper.setStyle(org.apache.axis.constants.Style.WRAPPED);

oper.setUse(org.apache.axis.constants.Use.LITERAL);

oper.addFault(new org.apache.axis.description.FaultDesc(

new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

“Exception”,

new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

true

));

call.setOperation( oper );

call.setOperationName(new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “opName”));

//调用Web Service,传入参数

String res = ( String ) call.invoke( new Object[](“arg0″,”arg1”));

System.out.println(“===============”);

return res;

}

/**

* @param args

*/

public static void main(String[] args) {

try {

System.out.println(getResult());

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

} catch (ServiceException e) {

e.printStackTrace();

} catch (SOAPException e) {

e.printStackTrace();

}

}

}

C++实现webservice

1 C++当然可以实现webservice,这是毋庸置疑的.axis2你知道吗?本质是运行在tomcat下的一个servlet,分java版本,和C语言版本.官方网站为:,首页上写着:

The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web Services.

Axis2 is avaialble in both Java as well as C, languages and details about each version can be found below. 大概意思就是这东西分java版本和C版本,可以方便用户创建,部署,运行web service.而C++完全是兼容C的.

2 当然需要服务器,可能要实现某个服务吧,至于怎样为其他平台服务,主要是监听端口实现解析http协议.

3 你的问题有问题,js不需要拼串成XML,服务器才要拼串,JS是运行在客户端的,客户端也不是通过SOAP与服务端进行通讯的,而是根据需要调用的服务的WSDL,提供对应参数,客户端与服务端的通讯是用http协议的,而通讯方式根据是GET还是POST把相关参数放到HTTP头或者体中.而web service之间的通讯才可能用得到SOAP.

4 PHP调用web service是非常简单的,貌似有个函数通过SOAP调用.C++编写的web service肯定有WSDL,可以根据WSDL描述的端口参数,来调用.

PS1:我没有做过C++的Web service,只做过java的,但是所有语言都是相同的,基本原理都是一样的,另外web service最好的做法是对外隐藏的,不能直接调用,应该有个类似调度中心的存在来负责调用,这是一个设计方式. 当然直接调用也是可以的,但这种方式效率不高.

PS2:C++可以做web service,但不是很好,缺乏技术支持,软件支持,虽然管道过滤器模型不限制过滤器的实现方式,但怎么说呢,C++就是不适合,毕竟和其他构件存在配合问题,而且开发成本也会相对要高点. 现在主流的是C#和JAVA.

JAVA调用C语言发布的webservice接口

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。

1、编写代码方式:

package com.yudun.test;

import java.rmi.RemoteException;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.message.PrefixedQName;

import org.apache.axis.message.SOAPHeaderElement;

import com.cezanne.golden.user.Exception;

import com.cezanne.golden.user.UserManagerServiceProxy;

import javax.xml.namespace.QName;

import java.net.MalformedURLException;

import javax.xml.rpc.ServiceException;

import javax.xml.soap.Name;

import javax.xml.soap.SOAPException;

public class testWebService {

public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException

  {

     //标识Web Service的具体路径

   String endpoint = “WebService服务地址”;

     // 创建 Service实例

    Service service = new Service();   

     // 通过Service实例创建Call的实例

    Call call = (Call) service.createCall();

    //将Web Service的服务路径加入到call实例之中.

    call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置

   // 由于需要认证,故需要设置调用的SOAP头信息。   

    Name headerName = new PrefixedQName( new QName(“发布的wsdl里的targetNamespace里的url”, “string_itemName”) ); 

          org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName); 

          header.addTextNode( “blablabla” ); 

          call.addHeader(header);

          

//    SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(“发布的wsdl里的targetNamespace里的url”, “SoapHeader”);   

//    soapHeaderElement.setNamespaceURI(“发布的wsdl里的targetNamespace里的url”);   

//    try  

//    {   

//        soapHeaderElement.addChildElement(“string_itemName”).setValue(“blablabla”);   

//    }   

//    catch (SOAPException e)   

//    {   

//        e.printStackTrace();   

//    }   

//    call.addHeader(soapHeaderElement);  

    //调用Web Service的方法

          org.apache.axis.description.OperationDesc oper;

          org.apache.axis.description.ParameterDesc param;

          oper = new org.apache.axis.description.OperationDesc();

          oper.setName(“opName”);

          param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg0”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

          param.setOmittable(true);

          oper.addParameter(param);

          param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg1”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

          param.setOmittable(true);

          oper.addParameter(param);

          param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg2”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

          param.setOmittable(true);

          oper.addParameter(param);

          oper.setReturnType(new javax.xml.namespace.QName(“”, “string”));

          oper.setReturnClass(java.lang.String.class);

          oper.setReturnQName(new javax.xml.namespace.QName(“”, “return”));

          oper.setStyle(org.apache.axis.constants.Style.WRAPPED);

          oper.setUse(org.apache.axis.constants.Use.LITERAL);

          oper.addFault(new org.apache.axis.description.FaultDesc(

                        new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

                        “Exception”,

                        new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”), 

                        true

                       ));

   call.setOperation( oper );

   call.setOperationName(new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “opName”));

    //调用Web Service,传入参数

   String res = ( String ) call.invoke( new Object[](“arg0″,”arg1”));

   System.out.println(“===============”);

   return res;

  }

/**

  * @param args

  */

 public static void main(String[] args) {

  try {

   System.out.println(getResult());

  } catch (MalformedURLException e) {

   e.printStackTrace();

  } catch (RemoteException e) {

   e.printStackTrace();

  } catch (ServiceException e) {

   e.printStackTrace();

  } catch (SOAPException e) {

   e.printStackTrace();

  }

    }

}

2、利用Eclipse自动生成WebService client代码就容易多了:

首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish

这样,WebService Client代码已经生成好了。

接下来写一个Test类,在main函数中输入如下代码:

String endpoint = “服务器的WebService的地址”;

 YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);

 try {

 String resultStr = umsp.opMethod(“arg0″,”arg1”);

 System.out.println(resultStr);

 } catch (Exception e) {

 System.out.println(“异常”);

 e.printStackTrace();

} catch (RemoteException e) {

 System.out.println(“RemoteException异常”);

 e.printStackTrace();

}

客户端用C语言调用WebService里的函数

已经包含进VC头文件了??

在C语言开头,#include加载这些文件

需要用的时候就可以直接用了。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。

c++调用WebService,参数string会有长度限制吗

般情况下,超过10000字节,就会调用失败,但是这不是字符串长度限制造成的,而是数据量过大,造成在网络在传输时间过长,超出了webservice默认的超时设置,导致调用失败,传统的做法是,数据量过大时要对数据进行压缩,客户端进行解压。或者修改webservice的timeout为较长的时间,或者设置为无穷大。这两种办法可以同时使用。

soap本身就是被序列化的,尽量不要直接传过大的数据,可以换种方式,如内网可考虑文件形式存储给出文件路径等方式,外网分割成多个包去返回!!

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/198428.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-04 10:24
下一篇 2024-12-04 10:25

相关推荐

  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Java 监控接口返回信息报错信息怎么处理

    本文将从多个方面对 Java 监控接口返回信息报错信息的处理方法进行详细的阐述,其中包括如何捕获异常、如何使用日志输出错误信息、以及如何通过异常处理机制解决报错问题等等。以下是详细…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28
  • Python作为中心语言,在编程中取代C语言的优势和挑战

    Python一直以其简单易懂的语法和高效的编码环境而著名。然而,它最近的发展趋势表明Python的使用范围已经从脚本语言扩展到了从Web应用到机器学习等广泛的开发领域。与此同时,C…

    编程 2025-04-28

发表回复

登录后才能评论