Silverlight?訪問?Apache服務器中的Webservice
開發環境
Vs2010?、?Silverlight4?、?Java Jdk1.6 U 21?、?Apache-tomcat-6.0.20?、?Myeclipse8.5?、?Apache-ant-1.8.1?、?Axis2?、?Geronimo-tomcat6-javaee5-2.2.
???????下載地址:
Apache-tomcat?:?http://apache.ziply.com/tomcat/
Apache-ant???:?http://apache.ziply.com/ant/
Axis2?:?http://apache.ziply.com/ws/axis2/
Geronimo-tomcat?:?http://apache.ziply.com/geronimo/
編寫?Webservice
???????其實就是寫個?java class?,步驟如下:
1、?使用?Myeclipse?新建個?java project
2、?在工程的?src?目錄下新建個?java class?(注:沒有用?package?)?SlWebServiceHelloWorld.java?,內容如下:
3、?找到這個?SlWebServiceHelloWorld?的?class?文件?,發布的時候有用。
SlWebServiceHelloWorld.java
public?class?SlWebServiceHelloWorld {
??/**
?????*?Webservice?業務方法
?????*
?????*?@return???"?XXX?, Hello World!"
?????*/???????
????public?String sayHelloWorld(String name) {
????????????return?name +?", Hello World!"?;
????}
}
生成?Axis2
Axis2?是一套嶄新的?WebService?引擎,該版本是對?Axis1.x?重新設計的產物。?Axis2?不僅支持?SOAP1.1?和?SOAP1.2?,還集成了非常流行的?REST WebService?,同時還支持?Spring?、?JSON?等技術。我們直接使用現成的?Axis2 War?文件。
1、??將?下載好的?axis2-1.5.1?和???apache-ant-1.8.1?解壓。
2、??通過?運行?,?進入?axis2-1.5.1\webapp?文件夾下
3、??配置好?Ant!
set?ANT_HOME=?D:\ apache-ant-1.8.1???(Ant?解壓的路徑?)
set?PATH=%ANT_HOME%\bin??
4、??打開?axis2-1.5.1\webapp\WEB-INF?,?在文件夾下新建個?名為?pojo?的文件夾,把
SlWebServiceHelloWorld.class?(上步編寫好?java?類的?Class?文件)?粘帖到這
5、??運行?ant?命令???,?自動在上級添加?dist?文件夾?,生成?axis2.war
6、??打開?axis2-1.5.1\dist?文件夾,?你會發現已經有?axis2.war?存在
發布?Axis2
眾所周知,若要允許?Silverlight?控件訪問其他域上的服務,該服務必須明確選擇允許跨域訪問。?Silverlight 4?支持兩種不同的機制供服務選擇跨域訪問:
在承載服務的域的根目錄中放置一個?clientaccesspolicy.xml?文件,以配置服務允許跨域訪問。
在承載服務的域的根目錄中放置一個有效的?crossdomain.xml?文件。
我們這邊使用的是?clientaccesspolicy.xml?。內容如下:
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
??<cross-domain-access>
????<policy>
??????<allow-from http-request-headers="SOAPAction">
????????<domain uri="*"/>
??????</allow-from>
??????<grant-to>
????????<resource path="/" include-subpaths="true"/>
??????</grant-to>
????</policy>
??</cross-domain-access>
</access-policy>
(1)?使用?Tomcat?發布
1?、把clientaccesspolicy.xml?放在apache-tomcat-6.0.20\webapps\ROOT?下。
2?、把?axis2.war?文件?復制?粘帖到?Tomcat?的?webapps???文件夾下
??????????????apache-tomcat-6.0.20\webapps\axis2.war
1、?啟動?Tomcat?(?apache-tomcat-6.0.20\bin\startup.bat?)
2、?在瀏覽器中輸入:?http://localhost:8080/axis2/services/listServices???結果如下:
你會發現有你部署上的?SlWebServiceHelloWorld?。
3、?點擊頁面中的?SlWebServiceHelloWorld?,你能看見?部署的?webservice??結果如下:
4、?測試你的?webservice?運行
http://localhost:8080/axis2/services/SlWebServiceHelloWorld/sayHelloWorld?name=”?Sweet?”
結果如下:
恭喜你,?webservice?部署?ok?!
(2)?????????使用?Geronimo?發布
1、?把?clientaccesspolicy.xml?放在?
geronimo-tomcat6-javaee5-2.2\repository\org\apache\geronimo\configs\welcome-tomcat\2.2\welcome-tomcat-2.2.car?下?
2、?運行?Geronimo?服務,并登陸后臺
http://localhost:8080/console/portal/Welcome
UserName:??????system
PassWord?:??????manager
3、?點擊“?部署新應用?”?部署?Axis2.war
4、部署成功?點擊“?web?應用程序”, 在瀏覽器中運行?http://localhost:8080/axis2/services/listServices
效果如下:
和?Tomcat?一樣?,你會發現有你部署上的?SlWebServiceHelloWorld?。
5、?點擊頁面中的?SlWebServiceHelloWorld?,你能看見?部署的?webservice??結果如下:
和?Tomcat?部署一樣
6、?測試下運行的?webservice
http://localhost:8080/axis2/services/SlWebServiceHelloWorld/sayHelloWorld?name="Geronimo?"
因為?Tomcat?和?Geronimo?部署的項目都一樣?,?所以?效果都一樣。
Silverlight?測試?Webservice
1、??新建個?silverlight?項目?,命名為:?SlApacheWebServiceTest
2、??Add??Service Reference?,填入
http://localhost:8081/axis2/services/SlWebServiceHelloWorld?wsdl
命名為:?ApacheSR???如下:
3、??設計界面,編寫方法。?因為用于測試,所以界面?比較隨便。效果如下:
左邊文本框填入信息,右邊文本框接收信息。
Xaml
<?UserControl?x?:?Class?="SlApacheWebServiceTest.MainPage"
?????xmlns?="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
?????xmlns?:?x?="http://schemas.microsoft.com/winfx/2006/xaml"
?????xmlns?:?d?="http://schemas.microsoft.com/expression/blend/2008"
?????xmlns?:?mc?="http://schemas.openxmlformats.org/markup-compatibility/2006"
?????mc?:?Ignorable?="d"
?????d?:?DesignHeight?="300"?d?:?DesignWidth?="800">
????<?Grid?>
????????<?TextBox?x?:?Name?="tbName"
??????????????????Height?="79"
??????????????????Width?="200"
??????????????????Margin?="131,81,469,139" />
????????<?Button?x?:?Name?="btnSend"
?????????????????Content?="?獲???取?¨??信???息??é"
?????????????????Height?="100"
?????????????????Width?="450"
?????????????????Click?="btnSend_Click"
?????????????????Margin?="131,167,205,33" />
????????<?TextBox?x?:?Name?="tbMessage"
??????????????????Height?="79"
??????????????????Width?="200"
??????????????????Margin?="395,81,205,139" />
????</?Grid?>
</?UserControl?>
Cs
namespace?SlApacheWebServiceTest
{
????public?partial?class?MainPage?:?UserControl
????{
????????public?MainPage()
????????{
????????????InitializeComponent();
????????}
????????private?void?btnSend_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????ApacheSR.SlWebServiceHelloWorldPortTypeClient?ws =?new?ApacheSR.SlWebServiceHelloWorldPortTypeClient?();
????????????ws.sayHelloWorldAsync(tbName.Text.Trim());
????????????ws.sayHelloWorldCompleted +=?new?EventHandler?<ApacheSR.sayHelloWorldCompletedEventArgs?>(ws_sayHelloWorldCompleted);
????????}
????????void?ws_sayHelloWorldCompleted(object?sender, ApacheSR.sayHelloWorldCompletedEventArgs?e) {
????????????tbMessage.Text = e.Result.ToString();
????????}
????}
}
4、??F5?運行,輸入?Sweet?,?得到結果?Sweet, Hello World!?。?效果如下:
測試?Pass?!??
(注意:我使用的?Tomcat?端口為?8081?,大家注意自己的端口!
??跨域文件?clientaccesspolicy.xml?的路徑:
??Tomcat?:?apache-tomcat-6.0.20\webapps\ROOT
Geronimo?:
geronimo-tomcat6-javaee5-2.2\repository\org\apache\geronimo\configs\welcome-tomcat\2.2\welcome-tomcat-2.2.car??)