zoukankan      html  css  js  c++  java
  • 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 }
    View Code

    注意:

    在客户端添加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 }
    View Code

    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>
    View Code

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

    模拟器

    运行效果

    源码下载:

    WCFforIIS.zip

    Databasedemo.zip

  • 相关阅读:
    在jQuery中Ajax的Post提交中文乱码的解决方案
    mysql 日期时间型的按日期分组
    mysql 逗号分隔的id转为逗号分隔的名称
    阿米在日本工作生活趣事(2)
    阿米在日本工作生活趣事(1)
    com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    File exists.If no other git process is currently running,
    带小数点的String 转int java.lang.Double cannot be cast to java.lang.Integer
    Jboss解决只能通过localhost访问而不能使用IP访问项目的问题
    This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the Map.get(key) look
  • 原文地址:https://www.cnblogs.com/mschen/p/4262110.html
Copyright © 2011-2022 走看看