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();
};
}
}
}

模拟器

运行效果

源码下载:

WCFforIIS.zip

Databasedemo.zip

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

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

    1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

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

    1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

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

    1.Main.axml 视图界面 2.视图代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

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

    Xamarin.Android 入门之:Xamarin+vs2015 环境搭建   一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客 ...

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

    [问题总结]WCF寄宿与IIS里时遇到的问题 最近在公司做了一个小的视频处理网站,由于视频处理,网站在不同的服务器上,所以处理视频的时候得在网站服务器上通过wcf请求视频处理服务器处理视频,并将结果返 ...

  6. Xamarin.Android 入门之:Android API版本设置

    一.引言 Xamarin.Android有几个Android API级别设置,确定多个版本的Android应用程序的兼容性.本博客解释了这些设置意味着什么,如何配置它们,以及它们在运行时对您的应用程序 ...

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

    在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能 ...

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

    一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bi ...

  9. Xamarin.Android 入门之:Listview和adapter

    一.引言 不管开发什么软件,列表的使用是必不可少的,而本章我们将学习如何使用Xamarin去实现它,以及如何使用自定义适配器.关于xamarin中listview的基础和适配器可以查看官网https: ...

随机推荐

  1. deque,list,queue,priority_queue

    1.deque deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector唯一不同的是,deque采用分块的线性存储结构来存 储数据,每块的大小一般为512字节,称为一个deq ...

  2. hdu5176(并查集)

    传送门:The Experience of Love 题意:一个叫Gorwin的女孩和一个叫Vivin的男孩是一对情侣.他们来到一个叫爱情的国家,这个国家由N个城市组成而且只有N−1条小道(像一棵树) ...

  3. Linux 内核升级步骤

    1.解压内核文件包#xz -d linux-3.2.63.tar.xz #tar xvf linux-3.2.63.tar 2.拷贝解压文件到/usr/src#cp -r linux-3.2.63 / ...

  4. Wix打包系列(三)自定义Action(Custom Action)

    原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...

  5. Wix打包系列(一)如何使用wix制作安装程序

    原文:Wix打包系列(一)如何使用wix制作安装程序 最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但用了一段时间发现vs打包太死板,而且使用起来问题很多.收费 ...

  6. 初尝Java序列化/反序列化对象

    看个类: package com.wjy.bytes; import java.io.Serializable; public class ObjTest implements Serializabl ...

  7. Flex中的DataGrid报错(二)

    1.错误描写叙述 此行的多个标记: -holeNum -1067: String 类型值的隐式强制指令的目标是非相关类型 mx.controls:Text. 2.错误原因  将字符串类型赋值给Text ...

  8. RAC优化大框架的分配(jumbo frame)

    RAC优化大框架的分配(jumbo frame) 首先讲讲MTU的概念:在网络通信中,有个MTU(Max Transmission Unit)的概念,即网络传输中最大帧的大小,这个值默认是1500By ...

  9. Cocos2d-x中父节点scale对子节点的影响

    背景:在前几天,刚接触cocos2d-x,随便找了一张图,作为一个CCSprite,而且设置了scale属性,然后在这个sprite上创建了一个CCLabelTTF,并用sprite->addC ...

  10. Codeforces Round #277.5 (Div. 2)---B. BerSU Ball (贪心)

    BerSU Ball time limit per test 1 second memory limit per test 256 megabytes input standard input out ...