第一篇 (wcf 与 android 传递基本数据类型与自定义数据类型)

废话不多说,直接入正题,供各位朋友参考~!

注意:服务器使用wcf rest风格,传递数据使用Json格式,但是并没有包装该格式,因为都是实现单参,双参必须要包装,当然单参也可以包装 ^_^

服务器端代码

wcf接口:

namespace Test

{

    // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。

    [ServiceContract]

    public interface IService1

    {



        [OperationContract]

        [WebInvoke(UriTemplate="contact_entity",RequestFormat=WebMessageFormat.Json,ResponseFormat=WebMessageFormat.Json,Method="POST")]

        Person contact_entity(Person ps);





        [OperationContract]

        [WebInvoke(UriTemplate = "contact_entity_return_string", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]

        string contact_entity_return_string(Person ps);



     

        [OperationContract]

        [WebInvoke(UriTemplate = "test1", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]

        string test1(string pass_string);

       

    }





}

wcf接口实现

namespace Test

{

    // 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。

    public class Service1 : IService1

    {



        #region IService1 成员



        public Person contact_entity(Person ps)

        {

           // throw new NotImplementedException();

            ps.username = "successful";

            return ps;

        }



        public string contact_entity_return_string(Person ps)

        {

           // throw new NotImplementedException();

            if (ps.username == "jwc")

            {

                return "successful";

            }

            else

            {

                return "failth";

            }

        }



   

        public string test1(string pass_string)

        {

            pass_string = pass_string.Replace("{", "").Replace("}", "").Trim();

            string[] arry = pass_string.Split(new char[1] { ':' });



            if (arry[1] == "jwc")

            {

                return "successful";

            }

            else

            {

                return "faith";

            }



   

        }



        #endregion

    }

}

Person代码:

namespace Test

{

    [DataContract]

    public class Person

    {

        [DataMember]

        public int id

        {

            get;

            set;

        }

        [DataMember]

        public string username

        {

            get;

            set;

        }

        [DataMember]

        public string password

        {

            get;

            set;

        }

    }

}

web.config

View Code
  1 <?xml version="1.0" encoding="utf-8"?>
2 <!--
3 注意: 除了手动编辑此文件以外,
4 还可以使用 Web 管理工具来配置应用程序的设置。
5 可以使用 Visual Studio 中的“网站”->“Asp.Net 配置”选项。
6 设置和注释的完整列表在
7 machine.config.comments 中,该文件通常位于
8 \Windows\Microsoft.Net\Framework\v2.x\Config
9 -->
10 <configuration>
11
12
13 <configSections>
14 <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
15 <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
16 <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
17 <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
18 <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
19 <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
20 <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
21 <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
22 </sectionGroup>
23 </sectionGroup>
24 </sectionGroup>
25 </configSections>
26
27
28 <appSettings/>
29 <connectionStrings/>
30
31 <system.web>
32 <!--
33 设置 compilation debug="true" ,将调试符号
34 插入已编译的页面中。但由于这会影响性能,
35 因此请只在开发过程中
36 将此值设置为 true
37 -->
38 <compilation debug="false">
39
40 <assemblies>
41 <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
42 <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
43 </assemblies>
44
45 </compilation>
46 <!--
47 通过 <authentication> 节可以配置
48 ASP.NET 使用的安全身份验证
49 模式,以标识传入的用户。
50 -->
51 <authentication mode="Windows" />
52 <!--
53 通过 <customErrors> 节可以配置在执行请求过程中出现未处理错误时,
54 应执行的操作。
55 具体说来,开发人员通过该节
56 可以配置要显示的 html 错误页
57 以代替错误堆栈跟踪。
58
59 <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
60 <error statusCode="403" redirect="NoAccess.htm" />
61 <error statusCode="404" redirect="FileNotFound.htm" />
62 </customErrors>
63 -->
64
65
66 <pages>
67 <controls>
68 <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
69 </controls>
70 </pages>
71
72 <httpHandlers>
73 <remove verb="*" path="*.asmx"/>
74 <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
75 <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
76 <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
77 </httpHandlers>
78 <httpModules>
79 <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
80 </httpModules>
81
82
83 </system.web>
84
85 <system.codedom>
86 <compilers>
87 <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
88 type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
89 <providerOption name="CompilerVersion" value="v3.5"/>
90 <providerOption name="WarnAsError" value="false"/>
91 </compiler>
92 </compilers>
93 </system.codedom>
94
95 <system.web.extensions>
96 <scripting>
97 <webServices>
98 <!--
99 取消对此节的注释以启用身份验证服务。如果适用,请加入
100 requireSSL="true"
101
102 <authenticationService enabled="true" requireSSL = "true|false"/>
103 -->
104 <!--
105 取消对这些行的注释,以启用配置文件服务并选择
106 可在 ASP.NET AJAX 应用程序中检索和修改的
107 配置文件属性。
108
109 <profileService enabled="true"
110 readAccessProperties="propertyname1,propertyname2"
111 writeAccessProperties="propertyname1,propertyname2" />
112 -->
113 <!--
114 取消对此节的注释,以启用角色服务。
115
116 <roleService enabled="true"/>
117 -->
118 </webServices>
119 <!--
120 <scriptResourceHandler enableCompression="true" enableCaching="true" />
121 -->
122 </scripting>
123 </system.web.extensions>
124 <!--
125 在 Internet 信息服务 7.0 下,运行 ASP.NET AJAX 要求
126 system.webServer 节。这在以前版本的 IIS 中并非必需。
127 -->
128 <system.webServer>
129 <validation validateIntegratedModeConfiguration="false"/>
130 <modules>
131 <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
132 </modules>
133 <handlers>
134 <remove name="WebServiceHandlerFactory-Integrated"/>
135 <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
136 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
137 <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
138 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
139 <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
140 </handlers>
141 </system.webServer>
142
143
144 <system.serviceModel>
145 <services>
146 <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
147 <!-- Service Endpoints -->
148 <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="webBehavior">
149 <!--
150 部署时,应删除或替换下列标识元素,以反映
151 在其下运行部署服务的标识。删除之后,WCF 将
152 自动推导相应标识。
153 -->
154 <identity>
155 <dns value="localhost"/>
156 </identity>
157 </endpoint>
158 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
159 </service>
160 </services>
161 <behaviors>
162 <endpointBehaviors>
163 <behavior name="webBehavior">
164 <!--这里必须设置-->
165 <webHttp/>
166 </behavior>
167 </endpointBehaviors>
168 <serviceBehaviors>
169 <behavior name="WcfService1.Service1Behavior">
170 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点-->
171 <serviceMetadata httpGetEnabled="true"/>
172 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
173 <serviceDebug includeExceptionDetailInFaults="false"/>
174 </behavior>
175 </serviceBehaviors>
176 </behaviors>
177 </system.serviceModel>
178 </configuration>



 

 

客户端代码

 

public class Wcf_Json_PassActivity extends Activity {

	private Button invok1_btn;

	private Button invok2_btn;

	private Button invok3_btn;

	private EditText result_txt;

	private String uri1 = "http://192.168.1.229/service1.svc/contact_entity";

	private String uri2 = "http://192.168.1.229/service1.svc/contact_entity_return_string";

	private String uri3 = "http://192.168.1.229/service1.svc/test1";

	private HttpClient hc = null;

	private HttpPost hp = null;

	private HttpResponse hr = null;



	/** Called when the activity is first created. */

	@Override

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		findAll();

		bind();

	}



	public void findAll() {

		invok1_btn = (Button) this.findViewById(R.id.invok1_btn);

		invok2_btn = (Button) this.findViewById(R.id.invok2_btn);

		invok3_btn = (Button) this.findViewById(R.id.invok3_btn);

		result_txt = (EditText) this.findViewById(R.id.result_txt);

	}



	public void bind() {

		invok1_btn.setOnClickListener(mylistener);

		invok2_btn.setOnClickListener(mylistener);

		invok3_btn.setOnClickListener(mylistener);

	}



	Handler hd = new Handler() {



		@Override

		public void handleMessage(Message msg) {

			// TODO Auto-generated method stub

			// super.handleMessage(msg);

			if (msg.what == 123) {

				result_txt.setText(msg.obj.toString());

			}

		}



	};



	private View.OnClickListener mylistener = new OnClickListener() {



		public void onClick(View v) {

			// TODO Auto-generated method stub

			switch (v.getId()) {

			case R.id.invok1_btn:

				JSONObject jo1 = new JSONObject();

				try {

					jo1.put("id", 11);

					jo1.put("username", "jwc");

					jo1.put("password", "123456");

					Thread th1 = new Thread(new mythread(uri1, jo1.toString()));

					th1.start();

				} catch (JSONException e) {

					// TODO Auto-generated catch block

					e.printStackTrace();

				}



				// invok_wcf(uri1,)

				break;

			case R.id.invok2_btn:

				JSONObject jo2 = new JSONObject();

				try {

					jo2.put("id", 11);

					jo2.put("username", "jwc");

					jo2.put("password", "123456");

					Thread th2 = new Thread(new mythread(uri2, jo2.toString()));

					th2.start();

				} catch (JSONException e) {

					// TODO Auto-generated catch block

					e.printStackTrace();

				}

				break;

			case R.id.invok3_btn:

			        JSONObject jo3 = new JSONObject();

				try {

					jo3.put("pass_string", "jwc");

				} catch (JSONException e) {

					// TODO Auto-generated catch block

					e.printStackTrace();

				} 				Thread th3 = new Thread(new mythread(uri3,jo3.toString()));

					th3.start();

			

				break;

			}

		}

	};



	class mythread implements Runnable {

		String my_uri;

		String my_date;



		public mythread(String uri, String date) {

			this.my_uri = uri;

			this.my_date = date;

		}



		public void run() {

			// TODO Auto-generated method stub

			hc = new DefaultHttpClient();

			hp = new HttpPost(my_uri);

			StringEntity se;

			try {

				se = new StringEntity(my_date, HTTP.UTF_8);

				se.setContentType("application/json");

				hp.setEntity(se);

				hr = hc.execute(hp);

				String strResp = null;

				if (hr.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {

					strResp = EntityUtils.toString(hr.getEntity());

				} else {

					strResp = "$no_found_date$";

				}

				Message msg = hd.obtainMessage(123);

				msg.obj = strResp;

				hd.sendMessage(msg);

			} catch (UnsupportedEncodingException e) {

				// TODO Auto-generated catch block

				e.printStackTrace();

			} catch (ClientProtocolException e) {

				// TODO Auto-generated catch block

				e.printStackTrace();

			} catch (IOException e) {

				// TODO Auto-generated catch block

				e.printStackTrace();

			} finally {

	                           	hp.abort();

	                                      }





		}



	}



}

你可能感兴趣的:(android)