Xamarin.Android 入门实例(2)之实现WCF 寄宿于IIS 的Web服务提供
1.WCF 契约 ICalculator.cs
using System.ServiceModel;
namespace Contracts
{
[ServiceContract]
public interface ICalculator
{
/// <summary>
/// 加法
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[OperationContract]
[DataContractFormat(Style = OperationFormatStyle.Rpc)]
double AddDouble(double x, double y); /// <summary>
/// 加法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
[OperationContract]
[DataContractFormat(Style = OperationFormatStyle.Rpc)]
string Add(double num1, double num2, ref double num); /// <summary>
/// 减法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
[OperationContract]
[DataContractFormat(Style = OperationFormatStyle.Rpc)]
string Reduce(double num1, double num2, ref double num); /// <summary>
/// 乘法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
[OperationContract]
[DataContractFormat(Style = OperationFormatStyle.Rpc)]
string Multiplication(double num1, double num2, ref double num); /// <summary>
/// 除法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
[OperationContract]
[DataContractFormat(Style = OperationFormatStyle.Rpc)]
string Division(double num1, double num2, ref double num); } }
注意:
在客户端添加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
using System;
using System.Collections.Generic;
using System.Text;
using Contracts; namespace Services
{
public class CalculatorService : ICalculator
{
/// <summary>
/// 加法
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public double AddDouble(double x, double y)
{
return x + y;
} /// <summary>
/// 加法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
///
public string Add(double num1, double num2, ref double num)
{
try
{
num = num1 + num2;
return "";
}
catch (Exception ex)
{
return ex.ToString();
}
} /// <summary>
/// 减法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
public string Reduce(double num1, double num2, ref double num)
{
try
{
num = num1 - num2;
return "";
}
catch (Exception ex)
{
return ex.ToString();
}
} /// <summary>
/// 乘法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
public string Multiplication(double num1, double num2, ref double num)
{
try
{
num = num1 * num2;
return "";
}
catch (Exception ex)
{
return ex.ToString();
}
} /// <summary>
/// 除法
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <param name="num">结果</param>
/// <returns></returns>
public string Division(double num1, double num2, ref double num)
{
try
{
num = num1 / num2;
return "";
}
catch (Exception ex)
{
return ex.ToString();
}
} }
}
3.IIS 创建文件CalculatorService.svc
<%@ServiceHost Service="Services.CalculatorService"%>
4.IIS 寄宿服务配置,基于basicHttpBinding绑定 Web.config
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service behaviorConfiguration="CalculatorBehavior" name="Services.CalculatorService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
contract="Contracts.ICalculator" />
<host>
<baseAddresses>
<add baseAddress="http://192.168.1.2:8080/CalculatorService.svc" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
<system.web>
<compilation debug="true"/>
</system.web>
</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 视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:id="@+id/txtPhoneNo"
android:layout_width="304.0dp"
android:phoneNumber="true"
android:hint="请输入第一个数"
android:layout_height="wrap_content"
android:layout_marginTop="5px"
android:layout_marginLeft="5px" />
<EditText
android:id="@+id/txtSMS"
android:layout_width="313.3dp"
android:layout_height="40.0dp"
android:phoneNumber="true"
android:gravity="top"
android:hint="请输入第二个数"
android:layout_below="@id/txtPhoneNo" />
<Button
android:id="@+id/btnadd"
android:text="加"
android:layout_width="69dp"
android:layout_height="wrap_content"
android:layout_below="@id/txtSMS" />
<Button
android:id="@+id/btnjian"
android:text="减"
android:layout_width="69dp"
android:layout_height="wrap_content"
android:layout_below="@id/txtSMS"
android:layout_toRightOf="@id/btnadd" />
<Button
android:id="@+id/btncheng"
android:text="乘"
android:layout_width="69dp"
android:layout_height="wrap_content"
android:layout_below="@id/txtSMS"
android:layout_toRightOf="@id/btnjian" />
<Button
android:id="@+id/btnchu"
android:text="除"
android:layout_width="69dp"
android:layout_height="wrap_content"
android:layout_below="@id/txtSMS"
android:layout_toRightOf="@id/btncheng" />
<EditText
android:id="@+id/txtjieguo"
android:layout_width="fill_parent"
android:layout_height="40.7dp"
android:gravity="top"
android:hint=""
android:layout_below="@id/btnchu" />
</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 = ;
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();
};
}
}
}
模拟器

运行效果

源码下载:
Xamarin.Android 入门实例(2)之实现WCF 寄宿于IIS 的Web服务提供的更多相关文章
- Xamarin.Android 入门实例(4)之实现对 SQLLite 进行添加/修改/删除/查询操作
1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...
- Xamarin.Android 入门实例(3)之呼叫电话号码
1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...
- Xamarin.Android 入门实例(1)之获取与解析JSON
1.Main.axml 视图界面 2.视图代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- 【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建
Xamarin.Android 入门之:Xamarin+vs2015 环境搭建 一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客 ...
- WCF寄宿与IIS里时遇到的问题
[问题总结]WCF寄宿与IIS里时遇到的问题 最近在公司做了一个小的视频处理网站,由于视频处理,网站在不同的服务器上,所以处理视频的时候得在网站服务器上通过wcf请求视频处理服务器处理视频,并将结果返 ...
- Xamarin.Android 入门之:Android API版本设置
一.引言 Xamarin.Android有几个Android API级别设置,确定多个版本的Android应用程序的兼容性.本博客解释了这些设置意味着什么,如何配置它们,以及它们在运行时对您的应用程序 ...
- 将WCF寄宿在托管的Windows服务中
在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能 ...
- Xamarin.Android 入门之:Bind java的jar文件+Android显示gif图片
一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bi ...
- Xamarin.Android 入门之:Listview和adapter
一.引言 不管开发什么软件,列表的使用是必不可少的,而本章我们将学习如何使用Xamarin去实现它,以及如何使用自定义适配器.关于xamarin中listview的基础和适配器可以查看官网https: ...
随机推荐
- 基于Predictive Parsing的ABNF语法分析器(十三)——rulelist、rule、rulename、define-as和elements
我们来看看rulelist,它是整个ABNF文法的入口,就是说一个ABNF文法就是一个规则列表rulelist.一个rulelist由若干个rule规则组成,每个rule由规则名rulename.定义 ...
- HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)
本人亲測,兼容各大主流浏览器,HTML5太强大了,须要的留下邮箱哦 假设想要立即收到,则可到我的资源下载 http://download.csdn.net/detail/laijieyao/81699 ...
- Java发展的时间表
Java发展的时间表. (版本号 名称 中文名 发布日期) JDK 1.1.4 Sparkler 宝石 1997-09-12 JDK 1.1.5 Pumpkin 南瓜 1997-12-13 JDK 1 ...
- 解决NGINX的WORDPRESS伪静态规则失效的问题
解决NGINX的WORDPRESS伪静态规则失效的问题 前两天搬到了EMSVPS的PR线路上,用上了最新的WDCP2.0管理面板,支持多用户管理(我们几个合租的VPS,最需要这个功能了),感觉很不错, ...
- Android----------WindowManager
我们Android平台是一个又一个的Activity组成的,每个Activity有一个或者多个View构成.所以说.当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后全部的操作 ...
- Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)
当使用Objective-C的时候,你总会遇到Foundation 框架中的一些类,这些类包含NSString,NSNumber,NSArray和NSDictionary,这些数据结构都是自 ...
- Python-Tkinter的Entry详解
#Tkinter教程之Entry篇 #Entry用来输入单行文本 '''1.第一个Entry程序''' from Tkinter import * root = Tk() Entry(root,tex ...
- 新版SDK自己主动加入PlaceholderFragment的思考
自从Android SDK更新到22.6.3,发现新建Activity的时候,会自己主动生成一个Fragment.这个Fragment是activity的静态内部类.同一时候生成了一个xml叫frag ...
- Microsoft Visio 2010 怎样把直线,虚线与箭头之间切换
我也是第一次接触这个东西,感慨是把箭头变成直线都搞了半天没搞出来,上网搜页没结果,一次偶然我会了,真是老天爷眷顾我,如今把方法给大家分享,欢迎大家不吝赐教. 直线变箭头: 刚開始是直线: 接着选中直线 ...
- TCP、UDP和HTTP
先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中 ...