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/zh-hant/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

發表回復

登錄後才能評論