⑴ webservice調用方式http和soap的區別,該如何處理
SOAP簡單的理解,就是這樣的一個開放協議SOAP=RPC+HTTP+XML:採用HTTP作為底層通訊協議;RPC作為一致性的調用途徑,XML作為數據傳送的格式,允許服務提供者和服務客戶經過防火牆在INTERNET進行通訊交互。RPC的描敘可能不大准確,因為SOAP一開始構思就是要實現平台與環境的無關性和獨立性,每一個通過網路的遠程調用都可以通過SOAP封裝起來,包括DCE(Distributed Computing Environment )RPC CALLS,COM/DCOM CALLS, CORBA CALLS, JAVA CALLS,etc。
SOAP 使用 HTTP 傳送 XML,盡管HTTP 不是有效率的通訊協議,而且 XML 還需要額外的文件解析(parse),兩者使得交易的速度大大低於其它方案。但是XML 是一個開放、健全、有語義的訊息機制,而 HTTP 是一個廣泛又能避免許多關於防火牆的問題,從而使SOAP得到了廣泛的應用。但是如果效率對你來說很重要,那麼你應該多考慮其它的方式,而不要用 SOAP。
為了更好的理解SOAP,HTTP,XML如何工作的,不妨先考慮一下COM/DCOM的運行機制,DCOM處理網路協議的低層次的細節問題,如PROXY/STUB間的通訊,生命周期的管理,對象的標識。在客戶端與伺服器端進行交互的時候,DCOM採用NDR(Network Data Representation)作為數據表示,它是低層次的與平台無關的數據表現形式。
Web service一般就是用SOAP協議通過HTTP來調用它,其實他就是一個WSDL文檔,客戶都可以閱讀WSDL文檔來用這個Web service。客戶根據WSDL描述文檔,會生成一個SOAP請求消息。Web service都是放在Web伺服器 (如IIS) 後面的,客戶生成的SOAP請求會被嵌入在一個HTTP POST請求中,發送到Web伺服器來。Web伺服器再把這些請求轉發給Web service請求處理器。請求處理器的作用在於,解析收到的SOAP請求,調用Web service,然後再生成相應的SOAP應答。Web伺服器得到SOAP應答後,會再通過HTTP應答的方式把它送回到客戶端。
個人以為就把webservice當成是Http這種請求和響應方式就可以處理大部分問題了。
webservice 的調用有3種方式
1. httpget
2. httppost
3. httpsoap
soap 的優點是 可以傳遞結構化的 數據,而前兩種不行。
btw, soap 最終也是使用 HTTP 傳送 XML
HTTP就是郵局的協議,他們規定了你的信封要怎麼寫,要貼多少郵票等。。。。
SOAP就是你們之間交流的協議,負責把你所需要表達的意思寫在信紙上,同時也負責讓對方能夠看得懂你的信。
SOAP (Simple Object Access Protocol) 顧名思義,是一個嚴格定義的信息交換協議,用於在Web Service中把遠程調用和返回封裝成機器可讀的格式化數據。事實上SOAP數據使用XML數據格式,定義了一整套復雜的標簽,以描述調用的遠程過程、參數、返回值和出錯信息等等。而且隨著需要的增長,又不得增加協議以支持安全性,這使SOAP變得異常龐大,背離了簡單的初衷。另一方面,各個伺服器都可以基於這個協議推出自己的API,即使它們提供的服務及其相似,定義的API也不盡相同,這又導致了WSDL的誕生。WSDL (Web Service Description Language) 也遵循XML格式,用來描述哪個伺服器提供什麼服務,怎樣找到它,以及該服務使用怎樣的介面規范,簡言之,服務發現。現在,使用Web Service的過程變成,獲得該服務的WSDL描述,根據WSDL構造一條格式化的SOAP請求發送給伺服器,然後接收一條同樣SOAP格式的應答,最後根據先前的WSDL解碼數據。絕大多數情況下,請求和應答使用HTTP協議傳輸,那麼發送請求就使用HTTP的POST方法。
⑵ c#怎麼調用http服務,http服務和webservice的區別
1、 c#語言下的Web 網站開發。 發布的話需要發布到IIS 。
2、http服務 就是web server。比如 Apache /IIS / Tomcat
3、webservice 是新建好Web網站開發項目後,可以選擇開發一個web service,然後發布到IIS,跨平台。
比如我想訪問你剛才用c#寫的返回一句話的程序「」你好「」
只要你把寫好的webservice部署到IIS,我通過網址就能獲取到XML格式或者json格式的「」你好「」。
⑶ webservice中採用協議Http,它是指什麼意思,還有其它的協議么
webservice 協議
Web Service使用的是 SOAP (Simple Object Access Protocol)協議
soap協議只是用來封裝消息用的。封裝後的消息你可以通過各種已有的協議來傳輸,比如http,tcp/ip,smtp,等等,你甚至還一次用自定義的協議,當然也可以用https協議。
Soap建立在http上,說白了是用http傳送xml而已。
除了WebService外,常見的遠程調用技術還有RMI(Remote method invoke)和CORBA,由於WebService的跨平台和跨編程語言特點,因此比其他兩種技術應用更為廣泛,但性能略低。
WebService使用SOAP協議實現跨編程語言和跨操作系統平台
WebService採用HTTP協議傳輸數據,採用XML格式封裝數據(即XML中說明調用遠程服務對象的哪個方法,傳遞的參數是什麼,以及服務對象的返回結果是什麼)。WebService通過HTTP協議發送請求和接收結果時,發送的請求內容和結果內容都採用XML格式封裝,並增加了一些特定的HTTP消息頭,以說明HTTP消息的內容格式,這些特定的HTTP消息頭和XML內容格式就是SOAP協議(simple object access protocol,簡單對象訪問協議) 。
SOAP協議= HTTP協議+ XML數據格式
SOAP協議是基於HTTP協議的,兩者的關系就好比高速公路是基於普通公路改造的,在一條公路上加上隔離欄後就成了高速公路。
商店的服務員只要收到了錢就給客戶提供貨物,商店服務員不用關心客戶是什麼性質的人,客戶也不用關心商店服務員是什麼性質的人。同樣,WebService客戶端只要能使用HTTP協議把遵循某種格式的XML請求數據發送給WebService伺服器,WebService伺服器再通過HTTP協議返回遵循某種格式的XML結果數據就可以了,WebService客戶端與伺服器端不用關心對方使用的是什麼編程語言。
HTTP協議和XML是被廣泛使用的通用技術,各種編程語言對HTTP協議和XML這兩種技術都提供了很好的支持,WebService客戶端與伺服器端使用什麼編程語言都可以完成SOAP的功能,所以,WebService很容易實現跨編程語言,跨編程語言自然也就跨了操作系統平台
⑷ 如何用c語言實現基於http的webservice
package com.yun.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();
}
}
}
⑸ http介面和webservice介面的區別在哪
web service(SOAP)與HTTP介面的區別
什麼是web service? soap請求是HTTP POST的一個專用版本,遵循一種特殊的xml消息格式Content-type設置為: text/xml任何數據都可以xml化。
為什麼要學習web service? 大多數對外介面會實現web service方法而不是http方法,如果你不會,那就沒有辦法對接。
web service相對http (post/get)有好處嗎?
1.介面中實現的方法和要求參數一目瞭然
2.不用擔心大小寫問題
3.不用擔心中文urlencode問題
4.代碼中不用多次聲明認證(賬號,密碼)參數
5.傳遞參數可以為數組,對象等...
web service相對http(post/get)快嗎?
由於要進行xml解析,速度可能會有所降低。
web service 可以被http(post/get)替代嗎?
完全可以,而且現在的開放平台都是用的HTTP(post/get)實現的。
⑹ http介面和webservice介面的區別
web service(SOAP)與HTTP介面的區別
什麼是web service? soap請求是HTTP POST的一個專用版本,遵循一種特殊的xml消息格式Content-type設置為: text/xml任何數據都可以xml化。
為什麼要學習web service? 大多數對外介面會實現web service方法而不是http方法,如果你不會,那就沒有辦法對接。
web service相對http (post/get)有好處嗎?
1.介面中實現的方法和要求參數一目瞭然
2.不用擔心大小寫問題
3.不用擔心中文urlencode問題
4.代碼中不用多次聲明認證(賬號,密碼)參數
5.傳遞參數可以為數組,對象等...
web service相對http(post/get)快嗎?
由於要進行xml解析,速度可能會有所降低。
web service 可以被http(post/get)替代嗎?
完全可以,而且現在的開放平台都是用的HTTP(post/get)實現的。
⑺ http 和webservice 有什麼區別
這兩個是完全不同的概念,不存在區別,http是一種網路協議,而webservice是一種兩個應用程序之間實現通信的解決方案。
但是兩者之間是有聯系的,Webservice實現消息的傳送就是將消息依附在http上進行傳輸的。
⑻ http介面測試和webservice介面測試的區別
由於要進行xml解析,webservice介面測試速度會比http介面測試有所降低請。webservice求是HTTP的一個專用版本,遵循一種特殊的xml消息格式Content-type設置為: text/xml任何數據都可以xml化。
webservice介面測試流程:
開發人員要到介面的wsdl地址和介面設計說明書。
在soapui中新建工程,導入wsdl地址。
選擇自己要測試的介面的方法,選擇request。
根據介面設計說明書選擇要測試方法的xml請求,並粘貼到soapui的請求欄,然後用自己的測試數據替換原有的xml請求中的參數。
點擊運行,查看返回的xml響應,並參照介面設計說明書及自己的輸入參數,確定介面返回的xml響應是否是預期結果,以判斷介面是否是通的 。