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. 使用FragmentTabhost取代Tabhost

       如今Fragment使用越来越广了,尽管Fragment寄生在Activity下.可是它的出现对于开发人员来说是一件很幸运的事,使开发的效率更高效了.好了以下就说说 FragmentTabhos ...

  2. Rapha&#235;l 中文帮助文档(API)

    http://html5css3webapp.com/raphaelApi.htm

  3. Flume传输数据事务分析

    Flume传输数据事务分析 本文基于ThriftSource,MemoryChannel,HdfsSink三个组件,对Flume传输数据的事务进行分析.假设使用的是其它组件.Flume事务详细的处理方 ...

  4. bzoj(矩阵快速幂)

    题意:定义Concatenate(1,N)=1234567……n.比如Concatenate(1,13)=12345678910111213.给定n和m,求Concatenate(1,n)%m. (1 ...

  5. Windows 10Bash命令

    Windows 10预览版14316开启Bash命令支持 00x0 前言 4月7日凌晨,微软推送了最新的Windows 10一周年更新预览版14316,其中重要的是原生支持Linux Bash命令行支 ...

  6. java总结,错误集

    java中abstract怎么使用 abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就 ...

  7. Android模拟器设置竖屏

    使用Android模拟器測试自己开发的程序时,有时候会发现屏幕为横屏显示,查看效果非常不方便. 这里记录了一种禁止横屏的方法. 在文件  Mainfest.xml 中,在须要禁止横屏的 activit ...

  8. prepareCall()运行存储过程

    CallableStatement 对象为全部的 DBMS 提供了一种以标准形式调用已储存过程的方法.已储存过程储存在数据库中.对已储存过程的调用是 CallableStatement对象所含的内容. ...

  9. poj1094Sorting It All Out

    主题链接: 啊哈哈,选我 题目: Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 268 ...

  10. extjs_11_mvc模式

    1.非mvc模式 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/fill/I ...