Android 调用WCF实例详解
Posted alex80
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 调用WCF实例详解相关的知识,希望对你有一定的参考价值。
Android 调用WCF实例
1. 构建服务端程序
1
2
3
4
5
6
7
8
9
10
11
12
13
|
using System.ServiceModel; namespace yournamespace
public interface IHello
[OperationContract] string SayHello();
<br> |
1
2
3
4
5
6
7
8
9
10
|
namespace YourNameSpace
public class YourService
public string SayHello(string words)
return "Hello " + words;
|
2. 构建IIS网站宿主
YourService.svc
<%@ServiceHost Debug="true" Service="YourNameSpace.YourService"%>
Web.config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<?xml version= "1.0" encoding= "utf-8" ?> <configuration> <system.serviceModel> <serviceHostingEnvironment> <serviceActivations > <add relativeAddress= "YourService.svc" service= "YourNameSpace.YourService" /> </serviceActivations > </serviceHostingEnvironment > <bindings> <basicHttpBinding> <binding name= "BasicHttpBindingCfg" closeTimeout= "00:01:00" openTimeout= "00:01:00" receiveTimeout= "00:10:00" sendTimeout= "00:01:00" bypassProxyOnLocal= "false" hostNameComparisonMode= "StrongWildcard" maxBufferPoolSize= "524288" maxReceivedMessageSize= "2147483647" messageEncoding= "Text" textEncoding= "utf-8" useDefaultWebProxy= "true" allowCookies= "false" > <readerQuotas maxDepth= "32" maxStringContentLength= "8192" maxArrayLength= "16384" maxBytesPerRead= "4096" maxNameTableCharCount= "16384" /> <security mode= "None" > <transport clientCredentialType= "None" proxyCredentialType= "None" realm= "" /> <message clientCredentialType= "UserName" algorithmSuite= "Default" /> </security> </binding> </basicHttpBinding> </bindings> <services> <service name= "YourNameSpace.YourService" behaviorConfiguration= "ServiceBehavior" > <host> <baseAddresses> </baseAddresses> </host> <endpoint binding= "basicHttpBinding" contract= "YourNameSpace.你的服务契约接口" > <identity> <dns value= "localhost" /> </identity> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name= "ServiceBehavior" > <serviceMetadata httpGetEnabled= "true" /> <serviceDebug includeExceptionDetailInFaults= "true" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.web> <compilation debug= "true" /> </system.web> </configuration> |
3. 寄宿服务
把网站发布到web服务器, 指定网站虚拟目录指向该目录
如果你能够访问http://你的IP:端口/虚拟目录/服务.svc
那么,恭喜你,你的服务端成功了!
4. 使用ksoap2调用WCF
去ksoap2官网
http://code.google.com/p/ksoap2-android/ 下载最新jar
5. 在Eclipse中新建一个Java项目,测试你的服务
新建一个接口, 用于专门读取WCF返回的SoapObject对象
ISoapService
1
2
3
4
5
6
7
8
9
|
package junit.soap.wcf; import org.ksoap2.serialization.SoapObject; public interface ISoapService SoapObject LoadResult();
<br> |
HelloService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package junit.soap.wcf; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; public class HelloService implements ISoapService private static final String MethodName = "SayHello" ; private String words; public HelloService(String words) this .words = words;
public SoapObject LoadResult() SoapObject soapObject = new SoapObject(NameSpace, MethodName); soapObject.addProperty( "words" , words); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // 版本 envelope.bodyOut = soapObject; envelope.dotNet = true ; envelope.setOutputSoapObject(soapObject); HttpTransportSE trans = new HttpTransportSE(URL); trans.debug = true ; // 使用调试功能 try
trans.call(SOAP_ACTION, envelope); System.out.println( "Call Successful!" ); catch (IOException e) System.out.println( "IOException" ); e.printStackTrace(); catch (XmlPullParserException e) System.out.println( "XmlPullParserException" ); e.printStackTrace();
SoapObject result = (SoapObject) envelope.bodyIn; return result;
|
测试程序
1
2
3
4
5
6
7
8
9
10
11
12
|
package junit.soap.wcf; import org.ksoap2.serialization.SoapObject; public class HelloWcfTest public static void main(String[] args) HelloService service = new HelloService( "Master HaKu" ); SoapObject result = service.LoadResult(); System.out.println( "WCF返回的数据是:" + result.getProperty( 0 ));
|
经过测试成功
运行结果:
Hello Master HaKu
6. Android客户端测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package david.android.wcf; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import org.ksoap2.serialization.SoapObject; public class AndroidWcfDemoActivity extends Activity private Button mButton1; private TextView text; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) super .onCreate(savedInstanceState); setContentView(R.layout.main); mButton1 = (Button) findViewById(R.id.myButton1); text = (TextView) this .findViewById(R.id.show); mButton1.setOnClickListener( new Button.OnClickListener() @Override public void onClick(View v) HelloService service = new HelloService( "Master HaKu" ); SoapObject result = service.LoadResult(); text.setText( "WCF返回的数据是:" + result.getProperty( 0 ));
);
<br> |
7. 最后运行结果
安卓(Android)开发:利用ksoap2调用webservice服务,并自动生成客户端代理类代码
安卓调用Webservice和Java稍有不同,利用的是ksoap2这个jar包。之前这个jar包是发布在googlecode上面的目前项目已经移动到了github.io,我这里贴上的github官方网站,我也不知道这个github.io和github.com是不是一回事。我们可以在以下页面看到项目的总览:http://simpligility.github.io/ksoap2-android/index.html。
1.下载ksoap2jar包
ksoap2项目的源码在这里,有兴趣的可以弄下来研究哦:
2.在Android Studio中进行配置
这一步简单,先放到lib文件夹下,然后再lib上点击右键,选择ADD AS LIB就可以了哦
3.利用网上的服务,自动生成ksoap2可用的webservice的客户端代理类
打开http://www.wsdl2code.com/pages/Home.aspx页面,在页面的右边填入你的webService的访问地址,然后选择生成的方式,我选的是Android Using kSoap2.如果你的webservice还没有发布,也可以直接上传其wsdl文件。
点击submit,此时要求登录,如果没有账号就注册一个,然后登陆,稍等一会这个工具就会为我们自动生成Webservice客户端代理类的代码了,点击下载
当然,自动生成的没有与jar运行环境啊什么的,可能使用的时候有些问题,至少包命名就得改成你自己的,所以,我们再简单的修改一下这些代码就可以直接使用了,省去了我们手动写客户端代理类的麻烦,是不是很方便啊。
以上是关于Android 调用WCF实例详解的主要内容,如果未能解决你的问题,请参考以下文章
Android Touch系统简介:实例详解onInterceptTouchEvent与onTouchEvent的调用过程
Android NDK开发----- Java与C互相调用实例详解