请问android/IOS如何使用WCF?

如题,新手接触app发现无法直接操作数据库,之前都是做网站,看了一些帖子发现需要使用webserver 于是就做了一个wcf 心想调用起来应该不难,但是由于java基础不好 软件android studio导入jar 也找不到方法...ios更是一筹莫展,期望有具体点的方法,指导一下到底如何调用wcf

wcf配置为支持http绑定
最好配置为使用soap
http://www.cnblogs.com/iscode/archive/2012/05/09/2491513.html
这样用js或者ios去调用,就是标准的方法了。

简单记录一下使用实体对象作为参数的传递!

在服务端使用webservice时是没有问题的,但是当替换成wcf时就出现传递的参数无法序列化的问题!

服务端代码:

Service1.svc

[csharp] view plaincopy
01.namespace WcfTeacherService

02.{

03. // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。

04. // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。

05. public class Service1 : IService1

06. {

07. public string DoWork(TestModel model)

08. {

09.

10. log4net.LogManager.GetLogger(this.GetType()).Error(model.AA);

11. return model.AA;

12. }

13. }

14.}

TestModel.cs

[csharp] view plaincopy
01.using System;

02.using System.Collections.Generic;

03.using System.Linq;

04.using System.Web;

05.using System.ServiceModel;

06.using System.Runtime.Serialization;

07.namespace WcfTeacherService

08.{

09. public class TestModel

10. {

11. public string AA { get; set; }

12. }

13.}

Android客户端使用http://www.wsdl2code.com/pages/Home.aspx来自动生成所需要的代码;调用如下:

[java] view plaincopy
01.@Override

02.protected void onCreate(Bundle savedInstanceState) {

03. super.onCreate(savedInstanceState);

04. setContentView(R.layout.activity_main);

05. Service1 service = new Service1();

06. TestModel model = new TestModel();

07. model.aA = "123";

08.

09. service.eventHandler = new IWsdl2CodeEvents() {

10. @Override

11. public void Wsdl2CodeFinished(String methodName, Object Data) {

12. @SuppressWarnings("unused")

13. String aa = methodName;

14. }

15.

16. @Override

17. public void Wsdl2CodeStartedRequest() {

18. }

19.

20. @Override

21. public void Wsdl2CodeFinishedWithException(Exception ex) {

22. }

23.

24. @Override

25. public void Wsdl2CodeEndedRequest() {

26. }

27. };

28. try {

29. service.DoWorkAsync(model);

30. } catch (Exception e) {

31. // TODO Auto-generated catch block

32. e.printStackTrace();

33. }

34.}

在WCF中以值类型作为参数,如:int,string,bool等都没有问题,但是自定义实体对象作为参数时,总是获取不到值!后来经过fiddler抓包反复对比,原来是TestModel的命名空间和DoWork方法的命名空间不一致所致!

所以要修改上面的TestModel.cs;在类名上面加上命名空间的声明

[csharp] view plaincopy
01.using System;

02.using System.Collections.Generic;

03.using System.Linq;

04.using System.Web;

05.using System.ServiceModel;

06.using System.Runtime.Serialization;

07.namespace WcfTeacherService

08.{

09. [DataContract(Namespace="http://tempuri.org/")]

10. public class TestModel

11. {

12. [DataMember]

13. public string AA { get; set; }

14. }

15.}

同时在接口上也加上相同的命名空间即可

[csharp] view plaincopy
01.namespace WcfTeacherService

02.{

03. // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。

04. [ServiceContract(Namespace="http://tempuri.org/"]

05. public interface IService1

06. {

07. [OperationContract]

08. string DoWork(TestModel model);

09. }

10.}

只要修改服务端的命名空间即可,ios和android端自动生成的代码无须变化!

记录起来挺简单的,就这么简单的问题可是调试了一天多呀
http://blog.csdn.net/wuwo333/article/details/42873415 你看是不是这个?

看我这篇博客,有你想要的完整代码。http://blog.csdn.net/chinacsharper/article/details/38386779