c調用phpwebservice
Ⅰ 怎麼在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;
}
}
以上是從我工程裡面摘的,可能有些變數樓主編譯不過去,但基本思想就是這樣的
Ⅱ 怎麼調用webservice服務
寫一個WINDOWS服務定期調用webservice中的方法。
1、先建一個WebService(ASP.NET Web 服務應用程序)
2、建這個WebService的虛擬目錄
3、執行生成一個文件
{
C:\Program Files\Microsoft Visual Studio 8\VC>wsdl /language:C# /out:c:\myProxyClass.cs http://hostServer:88/ImportData.asmx?WSDL
這個工具(方法)是針對一個webservice生成一個能動態調用的類
language:C#-----C#語言輸出
c:\myProxyClass.cs-----這個是生成的文件存在本地的文件名和路徑
http://hostServer:88/ImportData.asmx-----是虛擬目錄運行時的地址
}
4、創建一個windows服務程序(新建項目->左側選windows->右側選windows服務),然後把生成的文件引入到windows服務的程序中
5、寫調用事件(BeginImportUFData)
6、完成後編譯生成一下,這時就會在此windows服務程序的bin文件夾下生成一個exe文件(如:MyNewService.exe
)
7、按以下方式安裝
安裝:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe 絕對路徑\MyNewService.exe
卸載:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u 絕對路徑\MyNewService.exe
例如:(用dos命令窗口執行)
安裝:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe E:\chengxu\MyNewService\MyNewService\bin\Debug\MyNewService.exe
【然後顯示:正在安裝程序集,最後顯示:「提交」階段成功完成】
卸載:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u E:\chengxu\MyNewService\MyNewService\bin\Debug\MyNewService.exe
【最後提示:卸載完成】
啟動、停止服務是window操作,找到管理-->服務 操作
Ⅲ c++ 怎麼調用webservice sproxy.exe
2. 生成存客戶端存根程序和框架
wsdl2h -o xxx.h xxx.wsdl(-t D:/gsoap-2.7/棗旦尺gsoap/typemap.dat)
soapcpp2 -L -x -i xxx.h(-I D:/gsoap-2.7/gsoap/import)
3. 或直接自己編寫xxx.h,並生成xxx.wsdl
//遲培gsoap ns service name: xxx
//gsoap ns service style: rpc
//gsoap ns service encoding: literal
//gsoap ns service location: ht//localhost:8080
//gsoap ns schema namespace: ht/localhost:8080/xxx.wsdl
int ns__add(int a, int b, int* result);
3. 客戶端
1) 把如下凳高生成的文件添加到項目:
stdsoap2.h,stdsoap2.cpp,
soapH.h,soapC.cpp,soapStub.h,
soapxxxProxy.h,soapxxxProxy.cpp,xxxSoap.nsmap
wsock32.lib
2) 代理方式調用
#include "soapTestWebServiceProxy.h"
#include "Test www.hbbz08.com WebService.nsmap"
int main(int argc, char* argv[])
{
int result = 0;
TestWebServiceProxy proxy;
proxy.add(12, 23, &result);
} //w
4. 服務端
1) 把如下生成的文件添加到項目:
stdsoap2.h,stdsoap2.cpp,
soapH.h,soapC.cpp,soapStub.h,
soapxxxService.h,soapxxxService.cpp,xxxSoap.nsmap
wsock32.lib
2) 實現介面函數
int TestWebServiceService::add(int a, int b, int *result)
{
*result = a+b;
return SOAP_OK;
} /
3) 開啟服務
#include "soapTestWebServiceService.h"
#include "TestWebService.nsmap"
int main(int argc, char* argv[])
{
TestWebServiceService service;
service.run(8080);
Ⅳ C/C++實現WebService服務提供JSON數據的介面
我先說下我的想法,不知道對不對,其實webservice這個東西說白了就是個String的東西,你接受到以後怎麼解析json這個就看你自己的方法,調用webservice,別想那麼多,就是獲得一個字元串,找到字元串中標示位,取得後邊的值。希望我的回答對你有幫助
Ⅳ php的webservice怎麼用
Web Service為了異構系統的通信而產生的,它基本的思想就是使用基於XML的HTTP的遠程調用提供一種標準的機制,而省去建立一種新協議的需求。目前進行Web Service通信有兩種協議標准,一種是XML-RPC,另外一種是SOAP。XML-RPC比較簡單,出現時間比較早,SOAP比較復雜,主要是一些需要穩定、健壯、安全並且復雜交互的時候使用。
PHP中集成了XML-RPC和SOAP兩種協議的訪問,都是集中在xmlrpc擴展當中。另外,在PHP的PEAR中,不管是隱乎姿PHP 4還是PHP 5,都已經默認集成了XML-RPC擴展,而且該擴展跟xmlrpc擴展無關,能夠獨立實現XML-RPC的協議交互,如果沒有xmlrpc擴展,建議使用PEAR::XML-RPC擴展。
說的再多都是虛的,下面一個例子說明一切。
首先構造webservice 的頃穗服務端:
在服務端,我定義的函數是get( "helloworld" );//hello是傳入的參數
<?php
/**
* 函數:提供給RPC客戶端調用的函數
* 參數:
* $method 客戶端需要調用的函數
* $params 客戶端需要調用的函數的參數數組
* 返回:返回指定調用結果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];//傳入的函數名稱
$parameter1 = $params[1];//傳入的參數
if ($parameter == "get")
{
$return = "This data by get method".$parameter1 ;
}
else
{
$return = "Not specify method or params";
}
return $return;
}
//產生一個XML-RPC的伺服器端
$xmlrpc_server = xmlrpc_server_create();
//注冊一個伺服器端調用的方法rpc_server,實際指向的是rpc_server_func函數
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//接受客戶端POST過來的XML數據
$request = $HTTP_RAW_POST_DATA;
//執行調用客戶端的XML請求後獲取執行結果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//把函數處理後的結果XML進行輸出
header("Content-Type: text/xml");
echo $xmlrpc_response;
//銷毀XML-RPC伺服器端資源
xmlrpc_server_destroy($xmlrpc_server);
?>
用php來訪問所定義的webservice的服務端。
<?php
/**
* 函數:提供給客戶端進行連接XML-RPC伺服器端的函數
* 參數:
* $host 需要連接的主機
* $port 連接主機的埠
* $rpc_server XML-RPC伺服器端文灶絕件
* $request 封裝的XML請求信息
* 返回:連接成功成功返回由伺服器端返回的XML信息,失敗返回false
*/
function write_file( $string )
{
$fp = fopen( "xml.log","w" );
fprintf( $fp, "%s\n", $string );
fclose( $fp );
}
function rpc_client_call($host, $port, $rpc_server, $request) {
//打開指定的伺服器端
$fp = fsockopen($host, $port);
//echo $fp."<br>";
//構造需要進行通信的XML-RPC伺服器端的查詢POST請求信息
$query = "POST $rpc_server HTTP/1.1\r\nUser_Agent: XML-RPC Client\r\nHost: ".$host."\r\nContent-Type: text/xml\r\nContent-Length: ".strlen($request)."\r\n\r\n".$request."\r\n";
//echo $query."<br>";
//把構造好的HTTP協議發送給伺服器,失敗返回false
if (!fputs($fp, $query, strlen($query)))
{
$errstr = "Write error";
echo $errstr."<br>";
return false;
}
//獲取從伺服器端返回的所有信息,包括HTTP頭和XML信息
$contents = "";
while (!feof($fp))
{
$contents .= fgets($fp);
}
//關閉連接資源後返回獲取的內容
fclose($fp);
return $contents;
}
//構造連接RPC伺服器端的信息
$host = "localhost";
$port = 80;
$rpc_server = "/phpserv.php";//注意 這里一定要有/,切忌。
//把需要發送的XML請求進行編碼成XML,需要調用的方法是rpc_server,參數是get
$request = xmlrpc_encode_request("rpc_server", array( "get", "helloworld"));
//echo $request;
//調用rpc_client_call函數把所有請求發送給XML-RPC伺服器端後獲取信息
$response = rpc_client_call($host, $port, $rpc_server, $request);
write_file ( $response );
//echo "aaa".$response."xxx"."<br>";
//分析從伺服器端返回的XML,去掉HTTP頭信息,並且把XML轉為PHP能識別的字元串
$split = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
//echo "split=".$split."<br>";
$xml = explode($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
/*輸出從RPC伺服器端獲取的信息*/
print_r($response);
?>
例子都有了,其他的就是照搬咯。
Ⅵ PHP怎麼調用WEBSERVICE
php開盯稿磨啟soap,具體的方法網上搜一下,然後
$client = new SoapClient("webservice提供的介面地址凱斗敬讓");
這樣可以么?
Ⅶ php 中 webservice 是如何使用的 調用別人的介面 參數是如何傳遞的
php調用web service還是非常簡單的。下面用一個例子說明:
web service服務是查詢QQ用戶是否在線
使用php5開發客戶端:
<?php
try {
//$client = new SoapClient("HelloService.wsdl",array('encoding'=>'UTF-8'));
$client = new SoapClient("webservices/qqOnlineWebService.asmx?wsdl");
var_mp($client->__getFunctions());
print("");
var_mp($client->__getTypes());
print("");
class qqCheckOnline{
var $qqCode = "10000";
};
$arrPara = array(new qqCheckOnline);
$arrResult = $client->__Call("qqCheckOnline",$arrPara);//$client->qqCheckOnline($arrPara);
echo $arrResult->qqCheckOnlineResult . "";
} catch (SOAPFault $e) {
print $e;
}
?>
代碼確實很簡單吧,創建SoapClient對象時,可以使用保存在本地WSDL文件,也可以使用遠程的地址,後面的array數組里可以帶上很多的參數,具體參數可以查php的SoapClient幫助,這里帶的是字元集編碼,如果調用方法的參數里有中文,一定要指定字元集編碼,否則會出錯。
調
用web service前可以先調用SoapClient的__geunctions()和__getTypes()方法看一下你要調用的
web service暴露的方法,參數和數據類型,需要注意的是傳入的參數名一定要和soapclient裡面定義的一致,否則參數是傳不過去的。
需要使用SoapClient的__soapCall()或__call()方法,具體使用方法可以查php的幫助文檔。如果參數要求是一個結構體,請用類代替,如上面的代碼。
另外發現個問題,如果web service方法返回的是xml格式的字元串,php接收到以後會自己把數據內容解析出來,而不是xml字元串.
Ⅷ C#怎麼調用php webservice
把PHP.ini文件拷貝到Windows目錄絕首下,把正褲Soap的Dll文件php_soap.dll拷貝到System32目錄下。重啟並清數IIS。新建一個PHP文件。 1/* soap.php */ 2/* 連接的是C#實現的Webservice */ 3$client = new SoapClient( http://xx.xxx.xx.com/service.asmx?wsdl )..
Ⅸ 如何在C#中webservice調用方法總結
一、WebService在cs後台程序中的調用
A、通過命名空間和類名直接調用
示例:
WebService ws = new WebService();
string s = ws.HelloWorld();
B、通過添加WEB引用的方式調用,首先添加WEB引用,通過URL指向WEBSERVICE,
指定WEB引用名,假設為KK;
示例:
kk.WebService n = new kk.WebService();
string ss=n.HelloWorld();
二、WebService在前台頁面的JS 調用方法
1、首先通過下面的方法把Webservice在前台引用進來
<asp:ScriptManager runat="server">
<Services>
<asp:ServiceReference Path="WebService.asmx" InlineScript="True" />
</Services>
</asp:ScriptManager>
2、然後就可以通過JS程序進行調用,示例如下:
<script type="text/jscript">
function a()
{
WebService.HelloWorld(onresult);
}
//這里的onresult是回調函數
function onresult(result)
{
alert(result);
}
function b()
{
WebService.add(1,2,onreturn)
}
function onreturn(result)
{
alert(result);
}
//下面的'context'是上下文,可以通過回到函數通過重載的方式獲得;
function c()
{
WebService.div(1,1,onresultC,onerror,'context');
}
function onresultC(res,c)
{
alert(res);
alert(c);
}
//onerror是獲得異常信息的回調函數,下面給出了獲得異常信息的方法
function onerror(error)
{
var a="";
a=String.format("獲取伺服器端異常的具體類型:{0}\t\n獲取詳細的異常描述信息:{1}\t\n獲取造成異常的:{2}\t\n獲取伺服器端異常的堆棧
跟蹤信息:{3}\t\n獲取一個布爾值,表示異常是否是由於網路連接超時造成的{4}",
error.get_exceptionType(),
error.get_message(),
error.get_statusCode(),
error.get_stackTrace(),
error.get_timedOut())
alert(a);
}
a();
b();
c();
</script>
----自寫小例子---
web Service---:
[WebMethod]
public string HelloWorld() {
return "Hello World,wwg";
}
[WebMethod]
public int AddWwg(int a,int b)
{
return a + b;
}
exe---
using CallWebService.localhost; //因為自己沒有定義命名空間
namespace CallWebService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Service serviceWwg = new Service();
int i1 = Int32.Parse(txt1.Text.ToString());
int i2 = Int32.Parse(txt2.Text.ToString());
int iResult = serviceWwg.AddWwg(i1, i2);
lb1.Text = iResult.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
CallWebService.localhost.Service serviceWwg = new CallWebService.localhost.Service();
string strResult = serviceWwg.HelloWorld();
lb1.Text = strResult.ToString();
}
}
}