首页 > 代码库 > Android调用WCF
Android调用WCF
1. 构建服务端程序
using System.ServiceModel;namespace yournamespace{ [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")] public interface IHello { [OperationContract] string SayHello(); }}
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 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <system.serviceModel> 4 <serviceHostingEnvironment> 5 <serviceActivations > 6 <add relativeAddress="YourService.svc" service="YourNameSpace.YourService"/> 7 </serviceActivations > 8 </serviceHostingEnvironment > 9 10 <bindings>11 <basicHttpBinding>12 <binding name="BasicHttpBindingCfg" closeTimeout="00:01:00"13 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"14 bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"15 maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"16 messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"17 allowCookies="false">18 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"19 maxBytesPerRead="4096" maxNameTableCharCount="16384" />20 <security mode="None">21 <transport clientCredentialType="None" proxyCredentialType="None"22 realm="" />23 <message clientCredentialType="UserName" algorithmSuite="Default" />24 </security>25 </binding>26 </basicHttpBinding>27 </bindings>28 29 <services>30 <service name="YourNameSpace.YourService" behaviorConfiguration="ServiceBehavior">31 <host>32 <baseAddresses>33 <add baseAddress="http://localhost:59173/YourService"/>34 </baseAddresses>35 </host>36 <endpoint binding="basicHttpBinding" contract="YourNameSpace.你的服务契约接口">37 <identity>38 <dns value="localhost" />39 </identity>40 </endpoint>41 </service>42 </services>43 44 <behaviors>45 <serviceBehaviors>46 <behavior name="ServiceBehavior">47 <serviceMetadata httpGetEnabled="true" />48 <serviceDebug includeExceptionDetailInFaults="true" />49 </behavior>50 </serviceBehaviors>51 </behaviors>52 </system.serviceModel>53 <system.web>54 <compilation debug="true" />55 </system.web>56 </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 package junit.soap.wcf;2 3 import org.ksoap2.serialization.SoapObject;4 5 public interface ISoapService {6 SoapObject LoadResult();7 }
HelloService
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 NameSpace = "http://www.master.haku"; private static final String URL = "http://你的服务器/虚拟目录/你的服务.svc"; private static final String SOAP_ACTION = "http://www.master.haku/你的服务/SayHello"; 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; }}
测试程序
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客户端测试
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)); } }); }}
7. 最后运行结果
Android调用WCF
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。