Android Studio通过Ksoap2连接WCF
<环境>
Android Studio:1.1
Visual Studio:2013
Ksoap2:3.4
运行:Server2012R2 + IIS8.0 + xiaomi4.4.2
<目的>
通过VS建立一个简单的WCF服务HelloService,并提供服务方法SayHello,AS中通过Ksoap2连接到该服务并调用SayHello方法,并得到返回数据。
参考:
http://blog.sina.com.cn/s/blog_87131d9a0101rmwg.html
http://www.cnblogs.com/davidgu/archive/2012/05/16/2504182.html
http://blog.sina.com.cn/s/blog_72a0e0b00101j2s7.html
<过程>
VS中建立WCF服务Hello.svc,代码如下:
using System.ServiceModel;
namespace WCF.Demo.Service {
[ServiceContract(Name = "HelloService", Namespace = "http://www.longkai.com")]
public interface IHello {
[OperationContract]
string SayHello(string word);
}
}
实现的代码IHello.cs如下:
namespace WCF.Demo.Service {
public class Hello : IHello {
public string SayHello(string word) {
return "HelloWorld " + word;
}
}
}
右击Web.config,编辑WCF配置。设置高级->服务行为、新建服务、新建绑定配置等,最后发布到IIS上。配置文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" />
<customErrors mode="Off"/>
</system.web>
<system.serviceModel>
<serviceHostingEnvironment>
<serviceActivations >
<add relativeAddress="Hello.svc" service="WCF.Demo.Service.Hello"/>
</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="WCF.Demo.Service.Hello" behaviorConfiguration="ServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://192.168.1.2:9999/Hello"/>
</baseAddresses>
</host>
<endpoint binding="basicHttpBinding" contract="WCF.Demo.Service.IHello">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
在AS中输入代码:
//新建一个接口, 用于专门读取WCF返回的SoapObject对象
public interface ISoapService {
SoapObject LoadResult();
}
public class HelloService implements ISoapService {
private static final String NameSpace = "http://www.longkai.com";
private static final String URL = "http://192.168.1.2:9999/Hello.svc";
private static final String SOAP_ACTION = "http://www.longkai.com/HelloService/SayHello";
private static final String MethodName = "SayHello";
private String word;
public HelloService(String word) {
this.word = word;
}
public SoapObject LoadResult() {
SoapObject soapObject = new SoapObject(NameSpace, MethodName);
soapObject.addProperty("word", word);
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;
}
}
在主线程中输代码:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
HelloService service = new HelloService("Jack");
SoapObject result = service.LoadResult();
System.out.println("WCF返回的数据是:" + result.getProperty(0));
}
});
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。