Xamarin.Android 入门实例(2)之实现WCF 寄宿于IIS 的Web服务提供

1.WCF 契约 ICalculator.cs

 1 using System.ServiceModel;
 2 namespace Contracts
 3 {
 4     [ServiceContract]
 5     public interface ICalculator
 6     {
 7         /// <summary>
 8         /// 加法
 9         /// </summary>
10         /// <param name="x"></param>
11         /// <param name="y"></param>
12         /// <returns></returns>
13         [OperationContract]
14         [DataContractFormat(Style = OperationFormatStyle.Rpc)]
15         double AddDouble(double x, double y);
16
17         /// <summary>
18         /// 加法
19         /// </summary>
20         /// <param name="num1">第一个数</param>
21         /// <param name="num2">第二个数</param>
22         /// <param name="num">结果</param>
23         /// <returns></returns>
24         [OperationContract]
25         [DataContractFormat(Style = OperationFormatStyle.Rpc)]
26         string Add(double num1, double num2, ref double num);
27
28
29         /// <summary>
30         /// 减法
31         /// </summary>
32         /// <param name="num1">第一个数</param>
33         /// <param name="num2">第二个数</param>
34         /// <param name="num">结果</param>
35         /// <returns></returns>
36         [OperationContract]
37         [DataContractFormat(Style = OperationFormatStyle.Rpc)]
38         string Reduce(double num1, double num2, ref double num);
39
40
41
42         /// <summary>
43         /// 乘法
44         /// </summary>
45         /// <param name="num1">第一个数</param>
46         /// <param name="num2">第二个数</param>
47         /// <param name="num">结果</param>
48         /// <returns></returns>
49         [OperationContract]
50         [DataContractFormat(Style = OperationFormatStyle.Rpc)]
51         string Multiplication(double num1, double num2, ref double num);
52
53
54         /// <summary>
55         /// 除法
56         /// </summary>
57         /// <param name="num1">第一个数</param>
58         /// <param name="num2">第二个数</param>
59         /// <param name="num">结果</param>
60         /// <returns></returns>
61         [OperationContract]
62         [DataContractFormat(Style = OperationFormatStyle.Rpc)]
63         string Division(double num1, double num2, ref double num);
64
65     }
66
67
68 }

注意:

在客户端添加Web引用时为避免额外的布尔值参数被使用,确保代理客户端强制执行时使用的RPC风格的编码,这是SOAP 1.1规范的一部分。

请参考随笔:

Web Reference for a WCF Service has Extra “IdSpecified” Parameter ?

http://www.cnblogs.com/mschen/p/4262090.html

2. 服务实现 CalculatorService.cs

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using Contracts;
  5
  6 namespace Services
  7 {
  8     public class CalculatorService : ICalculator
  9     {
 10         /// <summary>
 11         /// 加法
 12         /// </summary>
 13         /// <param name="x"></param>
 14         /// <param name="y"></param>
 15         /// <returns></returns>
 16         public double AddDouble(double x, double y)
 17         {
 18             return x + y;
 19         }
 20
 21         /// <summary>
 22         /// 加法
 23         /// </summary>
 24         /// <param name="num1">第一个数</param>
 25         /// <param name="num2">第二个数</param>
 26         /// <param name="num">结果</param>
 27         /// <returns></returns>
 28         ///
 29         public string Add(double num1, double num2, ref double num)
 30         {
 31             try
 32             {
 33                 num = num1 + num2;
 34                 return "1";
 35             }
 36             catch (Exception ex)
 37             {
 38                 return ex.ToString();
 39             }
 40         }
 41
 42         /// <summary>
 43         /// 减法
 44         /// </summary>
 45         /// <param name="num1">第一个数</param>
 46         /// <param name="num2">第二个数</param>
 47         /// <param name="num">结果</param>
 48         /// <returns></returns>
 49         public string Reduce(double num1, double num2, ref double num)
 50         {
 51             try
 52             {
 53                 num = num1 - num2;
 54                 return "1";
 55             }
 56             catch (Exception ex)
 57             {
 58                 return ex.ToString();
 59             }
 60         }
 61
 62
 63         /// <summary>
 64         /// 乘法
 65         /// </summary>
 66         /// <param name="num1">第一个数</param>
 67         /// <param name="num2">第二个数</param>
 68         /// <param name="num">结果</param>
 69         /// <returns></returns>
 70         public string Multiplication(double num1, double num2, ref double num)
 71         {
 72             try
 73             {
 74                 num = num1 * num2;
 75                 return "1";
 76             }
 77             catch (Exception ex)
 78             {
 79                 return ex.ToString();
 80             }
 81         }
 82
 83         /// <summary>
 84         /// 除法
 85         /// </summary>
 86         /// <param name="num1">第一个数</param>
 87         /// <param name="num2">第二个数</param>
 88         /// <param name="num">结果</param>
 89         /// <returns></returns>
 90         public string Division(double num1, double num2, ref double num)
 91         {
 92             try
 93             {
 94                 num = num1 / num2;
 95                 return "1";
 96             }
 97             catch (Exception ex)
 98             {
 99                 return ex.ToString();
100             }
101         }
102
103     }
104 }

3.IIS 创建文件CalculatorService.svc

1 <%@ServiceHost Service="Services.CalculatorService"%>

4.IIS 寄宿服务配置,基于basicHttpBinding绑定 Web.config

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <system.serviceModel>
 4     <behaviors>
 5       <serviceBehaviors>
 6         <behavior name="CalculatorBehavior">
 7           <serviceMetadata httpGetEnabled="true"/>
 8         </behavior>
 9       </serviceBehaviors>
10     </behaviors>
11     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
12     <services>
13       <service behaviorConfiguration="CalculatorBehavior" name="Services.CalculatorService">
14         <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
15           contract="Contracts.ICalculator" />
16         <host>
17           <baseAddresses>
18             <add baseAddress="http://192.168.1.2:8080/CalculatorService.svc" />
19           </baseAddresses>
20         </host>
21       </service>
22     </services>
23   </system.serviceModel>
24   <system.web>
25     <compilation debug="true"/>
26   </system.web>
27 </configuration>

注意:为了保证 soap:address location 和wsdl:import location 显示和url里面的ip或者域名是一致请使用:<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> ,multipleSiteBindingsEnabled 是.net framework 4里面支持的特性,如果版本低于4,例如3.5 那么就要根据IIS binding来设置baseAddress.

5.Main.axml 视图

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent">
 5     <EditText
 6         android:id="@+id/txtPhoneNo"
 7         android:layout_width="304.0dp"
 8         android:phoneNumber="true"
 9         android:hint="请输入第一个数"
10         android:layout_height="wrap_content"
11         android:layout_marginTop="5px"
12         android:layout_marginLeft="5px" />
13     <EditText
14         android:id="@+id/txtSMS"
15         android:layout_width="313.3dp"
16         android:layout_height="40.0dp"
17         android:phoneNumber="true"
18         android:gravity="top"
19         android:hint="请输入第二个数"
20         android:layout_below="@id/txtPhoneNo" />
21     <Button
22         android:id="@+id/btnadd"
23         android:text="加"
24         android:layout_width="69dp"
25         android:layout_height="wrap_content"
26         android:layout_below="@id/txtSMS" />
27     <Button
28         android:id="@+id/btnjian"
29         android:text="减"
30         android:layout_width="69dp"
31         android:layout_height="wrap_content"
32         android:layout_below="@id/txtSMS"
33         android:layout_toRightOf="@id/btnadd" />
34     <Button
35         android:id="@+id/btncheng"
36         android:text="乘"
37         android:layout_width="69dp"
38         android:layout_height="wrap_content"
39         android:layout_below="@id/txtSMS"
40         android:layout_toRightOf="@id/btnjian" />
41     <Button
42         android:id="@+id/btnchu"
43         android:text="除"
44         android:layout_width="69dp"
45         android:layout_height="wrap_content"
46         android:layout_below="@id/txtSMS"
47         android:layout_toRightOf="@id/btncheng" />
48     <EditText
49         android:id="@+id/txtjieguo"
50         android:layout_width="fill_parent"
51         android:layout_height="40.7dp"
52         android:gravity="top"
53         android:hint=""
54         android:layout_below="@id/btnchu" />
55 </RelativeLayout>

6.Activity1.cs

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace Databasedemo
{
    [Activity(Label = "Databasedemo", MainLauncher = true, Icon = "@drawable/icon")]
    public class Activity1 : Activity
    {

        EditText tvjg;
        EditText num1;
        EditText num2;
        double num = 0;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            //加
            Button btnadd = FindViewById<Button>(Resource.Id.btnadd);
            //减
            Button btnjian = FindViewById<Button>(Resource.Id.btnjian);
            //乘
            Button btncheng = FindViewById<Button>(Resource.Id.btncheng);
            //除
            Button btnchu = FindViewById<Button>(Resource.Id.btnchu);
            //第一个数
            num1 = FindViewById<EditText>(Resource.Id.txtPhoneNo);
            //第二个数
            num2 = FindViewById<EditText>(Resource.Id.txtSMS);
            //结果
            tvjg = FindViewById<EditText>(Resource.Id.txtjieguo);

            var ca = new WebReference.CalculatorService();

             btnadd.Click += delegate
             {
                 double num1s = Convert.ToDouble(num1.Text.ToString());
                 double num2s = Convert.ToDouble(num2.Text.ToString());

                 string flag = ca.Add(num1s, num2s, ref num);
                 tvjg.Text = num1s.ToString() + "+" + num2s.ToString() + "=" + num.ToString();
             };

             btnjian.Click += delegate
             {
                 double num1s = Convert.ToDouble(num1.Text.ToString());
                 double num2s = Convert.ToDouble(num2.Text.ToString());

                 string flag = ca.Reduce(num1s, num2s, ref num);
                 tvjg.Text = num1s.ToString() + "-" + num2s.ToString() + "=" + num.ToString();
             };

             btncheng.Click += delegate
             {
                 double num1s = Convert.ToDouble(num1.Text.ToString());
                 double num2s = Convert.ToDouble(num2.Text.ToString());

                 string flag = ca.Division(num1s, num2s, ref num);
                 tvjg.Text = num1s.ToString() + "*" + num2s.ToString() + "=" + num.ToString();
             };
             btnchu.Click += delegate
             {
                 double num1s = Convert.ToDouble(num1.Text.ToString());
                 double num2s = Convert.ToDouble(num2.Text.ToString());

                 string flag = ca.Multiplication(num1s, num2s, ref num);
                 tvjg.Text = num1s.ToString() + "/" + num2s.ToString() + "=" + num.ToString();
             };
        }
    }
}

模拟器

运行效果

源码下载:

WCFforIIS.zip

Databasedemo.zip

时间: 2024-11-10 14:00:30

Xamarin.Android 入门实例(2)之实现WCF 寄宿于IIS 的Web服务提供的相关文章

Xamarin.Android 入门实例(4)之实现对 SQLLite 进行添加/修改/删除/查询操作

1.Main.axml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent"

Xamarin.Android 入门实例(1)之获取与解析JSON

1.Main.axml 视图界面 2.视图代码 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill

Xamarin.Android 入门实例(3)之呼叫电话号码

1.Main.axml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent"

【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

Xamarin.Android 入门之:Xamarin+vs2015 环境搭建 一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客. 二.准备工作 在安装之前需要下载好xamarin所需要的软件并一个个安装他们: 1.visual studio 2015:http://news.mydrivers.com/1/439/439398.htm 2.xamarin 4.0.3.214: http://download.xamarin.c

WCF寄宿与IIS里时遇到的问题

[问题总结]WCF寄宿与IIS里时遇到的问题 最近在公司做了一个小的视频处理网站,由于视频处理,网站在不同的服务器上,所以处理视频的时候得在网站服务器上通过wcf请求视频处理服务器处理视频,并将结果返回.我在写好这个wcf服务后寄宿到IIS里时遇到了不少的问题,下面是问题的描述,以及解决的方法. 问题1: 由于我这里的wcf服务是采用“WSHttpBinding”的方式,即安全绑定模式,客户端在引用这个服务后所生成的终结点配置(endpoint )就变成了 <endpoint address=&qu

将WCF寄宿在托管的Windows服务中

在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能够让部署更加简单,当然WCF的寄宿方式一般分为以下四种方式,针对每一种方式我来简单介绍以下: 具体的寄宿方式详细信息请参考MSDN:https://msdn.microsoft.com/zh-cn/library/ms733109(v=vs.100).aspx 一.WCF服务寄宿方式: 1):寄宿在

Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客. 二.准备工作 在安装之前需要下载好xamarin所需要的软件并一个个安装他们: 1.visual studio 2015:http://news.mydrivers.com/1/439/439398.htm 2.xamarin 4.0.3.214: http://download.xamarin.com/XamarinforVisualStudio/Windows/Xamari

Xamarin.Android 入门之:Bind java的jar文件+Android显示gif图片

一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bind jar更详细的内容可以查看https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/ ,这边只是做最简单的绑定. 二.Bind JAR 现在我想做一个功能,使在手机中显示gif图片,普

Xamarin.Android 入门之:Listview和adapter

一.引言 不管开发什么软件,列表的使用是必不可少的,而本章我们将学习如何使用Xamarin去实现它,以及如何使用自定义适配器.关于xamarin中listview的基础和适配器可以查看官网https://developer.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/ 本章主要介绍如果在listview一项中显示多条数据. 二.准备工作 1.创建一个Android项目取名为MyList