㈠ .net中webservice是同步調用還是非同步調用
WebService
其實非同步調用WebService是不需要在WebService中做任何操作的,只是普通的WebService就可埋搏以了,下面是我寫的一個簡單的WebService返回SqlServer2000中NorthWind資料庫中所有員工的信息
[WebMethod]
public DLL.EmployeesDataTable getEmployee()
{
DLL.EmployeesDataTable result = new DLL.EmployeesDataTable();
DLLTableAdapters.EmployeesTableAdapter eta = new WebServiceAsyn.DLLTableAdapters.EmployeesTableAdapter();
eta.FillEmployee(result);
return result;
} 這里我需要聲明一下,返回的 DLL.EmployeesDataTable類型是我用DataSet生成的強類型,或者你可以認為他是DataTable。
如何在Asp.Net里引入WebService呢?首先右鍵單擊解決方案資源管理器中的項目,然後選擇添加Web引用(你也可以單擊網站菜單選擇添加Web引用),在彈出的對話框中填入WebService的地址,並填寫Web引用名後點擊添加引用按鈕就可以了,這時我們就可以在代碼視圖中根據web引用名彎侍祥來對WebService進行調用了,下面是我的CS代碼
//實體化WebService引用
private AsynWebService.Service1 asynSer;
//構造函數初始化WebService引用,並為非同步調用WebService設置好了結果處理函數【方法名Completed】(先這么叫吧,我也不知道怎麼叫)
public _Default()
{
asynSer = new AsynWebService.Service1();
asynSer.HelloWorldCompleted += new AsynWebService.(asynSer_HelloWorldCompleted);
asynSer.getEmployeeCompleted += new AsynWebService.(asynSer_getEmployeeCompleted);
}
protected void Button1_Click(object sender, EventArgs e)
{
//開始非同步調用HelloWorld;
asynSer.HelloWorldAsync();
}
protected void asynSer_HelloWorldCompleted(object sender, AsynWebService.HelloWorldCompletedEventArgs e)
{
this.Label1.Text = e.Result.ToString();
}
protected void asynSer_getEmployeeCompleted(object sender, AsynWebService.getEmployeeCompletedEventArgs e)
{
this.GridView1.DataSource = e.Result;
this.GridView1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
//開始非同步調用getEmployee
asynSer.getEmployeeAsync();
} 到這里我們後台代碼就寫完了,但是我們還要在ASPX頁面設置一個允許非同步調用的屬性 Async="true"這樣就可以在這個頁面里進行非同步調用了!
同步調用的方法和非同步調用的方法不一樣,非同步調用談老的方法是WebServic的方法名+Async()作為方法名,同步調用的方法就是WebService的方法名。
其實從原理上看不管是Ajax還是Asp.Net或者Flex它們的非同步調用都是一樣的,下面我們來和Ajax比較一下Ajax中的核心對象--XMLHttpRequest對象一個非常重要的屬性就是onreadystatechange,下面是一個基於Ajax的簡單的用戶名的驗證<script language="javascript" type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
function requestStart()
{
if(document.getElementById("tbx1").value.length <= 4)
{
alert("用戶名的長度要求大於4個字元!");
return false;
}
document.getElementById("sp1").innerText = "Loding";
var url = "default.aspx?userName=" + document.getElementById("tbx1").value;
createXMLHttpRequest();//創建XMLHttpRequest對象
xmlHttp.onreadystatechange = callBack;//為XMLHttpRequest對象指定結果處理函數
xmlHttp.open("GET",url);//打開鏈接
xmlHttp.send(null);//發送請求
}
//結果處理函數
function callBack()
{
if(xmlHttp.readyState == 4)
{
document.getElementById("sp1").innerText = xmlHttp.responseText;
}
}
</script>
㈡ java如何調用webservice介面
Java通過WSDL文件來調用直接調用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用遠程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL裡面描述的介面名稱
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//介面的參數
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
String temp = "測試人員";
String result = (String)call.invoke(new Object[]{temp});
//給方法傳遞參數,並且調用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
㈢ java實現調用webserver
一、利用jdk web服務api實現,這里使用基於 SOAP message 的 Web 服務
1.首先建立一個Web services EndPoint:
Java代碼
package Hello;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
@WebService
public class Hello {
@WebMethod
public String hello(String name) {
return "Hello, " + name + "\n";
}
public static void main(String[] args) {
// create and publish an endpoint
Hello hello = new Hello();
Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);
}
}
Java代碼
package Hello;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
@WebService
public class Hello {
@WebMethod
public String hello(String name) {
return "Hello, " + name + "\n";
}
public static void main(String[] args) {
// create and publish an endpoint
Hello hello = new Hello();
Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);
}
}
2.使用 apt 編譯 Hello.java(例:apt -d [存放編譯後的文件目錄] Hello.java ) ,會生成 jaws目錄
3.使用java Hello.Hello運行,然後將瀏覽器指向http://localhost:8080/hello?wsdl就會出現下列顯示
4.使用wsimport 生成客戶端
使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl
5.客戶端程序:
Java代碼
class HelloClient{
public static void main(String args[]) {
HelloService service = new HelloService();
Hello helloProxy = service.getHelloPort();
String hello = helloProxy.hello("你好");
System.out.println(hello);
}
}
Java代碼
class HelloClient{
public static void main(String args[]) {
HelloService service = new HelloService();
Hello helloProxy = service.getHelloPort();
String hello = helloProxy.hello("你好");
System.out.println(hello);
}
}
㈣ jsP非同步調用webservice,寫好了客戶端,在jsp頁面裡面調用客戶端,客戶端將請求發給service。
建議樓主首先先檢查是否導入了所有需要的jar包,然後這個問題解決了就好辦了。
在後台代碼中(Actioin文件,或者Servlet文件),寫好客戶端的調用代碼到一個函數中。然後顯示頁面可以使用兩種方式調用這個後台代碼:
1、直接向後台提交,獲取數據後再返回到顯示頁面。實現簡單,但是有刷屏現象
2、使用ajax調用後台代碼,在ajax中綁定一個調用成功後的響應函數(javascript函數)。在該函數中更新你的頁面元素就可以了,這樣不用刷屏。(使用JQuery就可以很容易實現)
㈤ 如何解決java axis 調用webservice伺服器操作異常
安裝Eclipse-jee,下載的最新版本Axis2 1.4.1 Release,其內部結構為 開發前配置:在Eclipse的菜單欄中,Window --> Preferences --> Web Service --> Axis2 Perferences,在Axis2 runtime location中選擇Axis2解壓縮包的位置,設置好後,點"OK"即行。 新建一個Java Project,命名為"WS_01",在"WS_01"項目上new --> other,找到"Web Services"下面的"Web Service"; 在出現的Web Services對象框,在Service implementation中點擊"Browse",進入Browse Classes對象框,查找到我們剛才寫的寫的CalculateService類。(如下圖)。點擊"ok",則回到 Web Service話框。 在Web Service對話框中,將Web Service type中的滑塊,調到"start service「的位置,將Client type中的滑塊調到"Test client"的位置。 在Web Service type滑塊圖的右邊有個"Configuration",點擊它下面的選項,進入Service Deployment Configuration對象框,在這里選擇相應的Server(我這里用Tomcat6.0)和Web Service runtime(選擇Apache Axis2) 點OK後,則返回到Web Service對話框,同理,Client type中的滑塊右邊也有"Configuration",也要進行相應的置,步驟同上。完成後,Next --> next即行。到了Server startup對話框,有個按鍵"start server",點擊它,則可啟動Tomcat伺服器了。 等啟完後,點擊"next -- > next",一切默認即行,最後,點擊完成。最後,出現如下界面:(Web Service Explorer),我們在這里便可測試我們的Web服務。 測試比較簡單,例如,我們選擇一個"plus"的Operation,出現下圖,在x的輸入框中輸入2,在y的 輸入框中輸入3,點擊"go",便會在status欄中顯示結果5.0。其他方法的測試也類似。