WCF创建到使用

1,在VS里面新建一个类库项目

2,向类库项目里添加WCF服务文件

3.按照WCF约束规范编写接口和实现类

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfDataSreve
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IOracleServe”。
    [ServiceContract]
    [ServiceKnownType(typeof(DBNull))]
    public interface IOracleServe
    {
        [OperationContract]
        DataTable GetOrderHandleData(string orderindex);
        [OperationContract]
        DataTable GetWorkOrderData(string orderindex);
        [OperationContract]
        DataTable GetWorkOrderByDate(string starttime, string endtime);
        [OperationContract]
        string DeleteOrderHandle(string orderindex);
        [OperationContract]
        string DeleteAllOrderHandle(string orderindex);
        [OperationContract]
        string StrConn(string index);

    }
}

  

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OracleClient;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfDataSreve
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“OracleServe”。

    public class OracleServe : IOracleServe
    {
        public string ConnectionString { get; set; }
        public OracleServe()
          {
             ConnectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
          }
        public DataTable GetOrderHandleData(string orderindex)
         {
             using ( OracleConnection conn = new OracleConnection(ConnectionString))
             {

                 conn.Open();
                 OracleCommand cmd = new OracleCommand();
                 cmd.CommandText = @"select * from M_ORDERHANDLE where ORDERINDEX  = ‘" + orderindex + "‘";
                 cmd.Connection = conn;
                 cmd.CommandType = CommandType.Text;
                 OracleDataAdapter da = new OracleDataAdapter(cmd);
                 DataSet ds = new DataSet();
                 da.Fill(ds,"OrderHandle");
                 conn.Close();
                 return ds.Tables["OrderHandle"];
             }
         }
       public  DataTable GetWorkOrderData(string orderindex)
         {
             using (OracleConnection conn = new OracleConnection(ConnectionString))
             {

                 conn.Open();
                 OracleCommand cmd = new OracleCommand();
                 cmd.Connection = conn;
                 cmd.CommandText = @"SELECT * FROM M_WORKORDER where ORDERINDEX  = ‘" + orderindex + "‘";
                 cmd.CommandType = CommandType.Text;
                 OracleDataAdapter da = new OracleDataAdapter(cmd);
                 DataSet ds = new DataSet();
                 da.Fill(ds, "WorkOrder");
                 return ds.Tables["WorkOrder"];

             }
         }
      public DataTable GetWorkOrderByDate(string starttime, string  endtime )
       {
           using (OracleConnection conn = new OracleConnection(ConnectionString))
           {

               conn.Open();
               OracleCommand cmd = new OracleCommand();
               cmd.Connection = conn;
               cmd.CommandText = @"SELECT * FROM M_WORKORDER where to_char(CREATETIME, ‘yyyy-mm-dd‘) >= ‘" + Convert.ToDateTime(starttime).ToString("yyyy-MM-dd") + "‘ and to_char(CREATETIME, ‘yyyy-mm-dd‘) <= ‘" + Convert.ToDateTime(endtime).ToString("yyyy-MM-dd") + "‘";
               cmd.CommandType = CommandType.Text;
               OracleDataAdapter da = new OracleDataAdapter(cmd);
               DataSet ds = new DataSet();
               da.Fill(ds, "WorkOrder");
               return ds.Tables["WorkOrder"];

           }
       }
       public string StrConn(string index)
       {
           return ConnectionString+index;
       }
       public string DeleteOrderHandle(string orderindex)
       {

              using (OracleConnection conn = new OracleConnection(ConnectionString))
             {
                 conn.Open();
                 OracleCommand cmd = new OracleCommand();
                 cmd.Connection = conn;
                 cmd.CommandText = @"Delete  FROM M_ORDERHANDLE where HANDLELSH  = ‘" + orderindex + "‘";
                 cmd.CommandType = CommandType.Text;
                 if(cmd.ExecuteNonQuery()>0)
                 {
                     return "OK";
                 }
                 else
                 {
                     return "No";
                 }

             }
       }

       public string DeleteAllOrderHandle(string orderindex)
      {
          using (OracleConnection conn = new OracleConnection(ConnectionString))
          {
              conn.Open();
              OracleCommand cmd = new OracleCommand();
              cmd.Connection = conn;
              cmd.CommandText = @"Delete  FROM M_ORDERHANDLE where ORDERINDEX = ‘" + orderindex + "‘";
              cmd.CommandType = CommandType.Text;
              if (cmd.ExecuteNonQuery() > 0)
              {
                  return "OK";
              }
              else
              {
                  return "No";
              }

          }
      }
    }
}

  

ConnectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];此句读取下面创建的WCF服务中web.config的节点

4,右击解决方案添加新建网站-》WCF服务

5,更改网站信息,web.config,添加数据库访问路径节点(加粗部分)

 <?xml version="1.0" ?> 
- <configuration>
- <system.web>
  <compilation debug="true" targetFramework="4.0" />
  </system.web>
- <system.serviceModel>
- <services>
- <service name="WcfDataSreve.OracleServe">
  <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="LargeDataTransferServicesBinding" contract="WcfDataSreve.IOracleServe" />
  </service>
  </services>
- <bindings>
- <basicHttpBinding>
- <binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647" messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00">
  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
  </binding>
  </basicHttpBinding>
  </bindings>
- <behaviors>
- <serviceBehaviors>
- <behavior>
- <!--  为避免泄漏元数据信息,请在部署前将以下值设置为 false
  -->
  <serviceMetadata httpGetEnabled="true" />
- <!--  要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息
  -->
  <serviceDebug includeExceptionDetailInFaults="false" />
  </behavior>
  </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
- <system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
- <!--         若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
        在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。

  -->
  <directoryBrowse enabled="true" />
  </system.webServer>
- <appSettings>
  <add key="ConnectionString" value="Data Source=10.192.165.144/OSMP;User ID=cnosm;Password=osm1234$" />
  </appSettings>
  </configuration>

6,更改WCF服务下的Service.svc文件,并把App_Code文件夹下的系统定义的服务删除

<%@ ServiceHost Language="C#" Debug="true" Service="WcfDataSreve.OracleServe" >

加粗部分为类库名.服务实现类

7,当传输数据量大或是需要控制传输量时添加红色部分代码

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfDataSreve.OracleServe">
        <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="LargeDataTransferServicesBinding" contract="WcfDataSreve.IOracleServe"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647"
                 messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00" >
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
        在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <appSettings>
    <add key="ConnectionString" value="Data Source=10.192.165.144/OSMP;User ID=cnosm;Password=osm1234$"/>
  </appSettings>
</configuration>

7,右击解决方案创建WPF程序引用上面的服务

在WPF项目中右击引用-》添加服务引用-》打开页面点击发现,确认即可,

引用方法是,服务引用名.服务实现类名Client new wcf=服务引用名.服务实现类名Client();即可通过对象名引用服务接口(部分代码)

 public class DataViewModel: ViewModelBase
    {
        public ObservableCollection<OrderHandle> OrderHandleList{get; set;}
        public WCFOracleService.OracleServeClient Wcf;
        public DataViewModel()
        {
            OrderHandleList = new ObservableCollection<OrderHandle>();
            Wcf = new WCFOracleService.OracleServeClient();
            DeleteSelect = new RelayCommand(ExecuteSelect, CanExecuteSelect);
            DeleteAll = new RelayCommand(ExecuteAllDelete, CanExecuteALl);
        }
        public void QueryOrderHandle(string orderindex)
        {
            DataTable table = Wcf.GetOrderHandleData(orderindex);
            if(table==null)
            {
                return;
            }
            for(int i=0;i<table.Rows.Count;i++)
            {
                OrderHandle Oh = new OrderHandle();
                Oh.HandleDescrtption = table.Rows[i]["HANDLEDESCRIPTION"].ToString();
                Oh.HandLelsh = table.Rows[i]["HANDLELSH"].ToString();
                Oh.OrderIndex = table.Rows[i]["ORDERINDEX"].ToString();
                Oh.HandlePerson = table.Rows[i]["HANDLEPERSON"].ToString();
                Oh.HandLetype = table.Rows[i]["HANDLETYPE"].ToString();
                Oh.HandleTime =table.Rows[i]["HANDLETIME"].ToString();
                Oh.HandleStatus = table.Rows[i]["HANDLESTATUS"].ToString();
                Oh.Select = false;
                OrderHandleList.Add(Oh);
            }
        }

  8 发布至IIS

(1).把整个WCF服务文件拷贝至服务器中

(2)找到服务器中IIS管理器找到网站,新添加一个网站,配置基本信息,

(3)配置完成后,点击IIS右侧浏览网站-》点击Service.svc,拷贝如下地址到添加服务引用的页面即可找到,并引用

svcutil.exe http://IP地址和端口号
/Service.svc?wsdl

  

时间: 2024-08-05 04:58:36

WCF创建到使用的相关文章

用C#基于WCF创建TCP的Service供Client端调用

本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Service1改名为MainService 4): 添加一个Interface来定义Service的契约 4.1):截图如下所示 4.2):IOrderService.cs的代码如下所示 using System; using System.Collections.Generic; using System

使用WCF 创建 Rest service

REST SERVICE 允许客户端修改url路径,并且web端功过url 请求数据. 他使用http协议进行通讯,想必大家都知道 . 并且我们可以通过设置进行数据类型转换, 支持XML,JSON 格式. 大多情况下我们都采用webservice ,或在MVC下创建REST服务来支持服务端调用. 但WCF当道之时.我们是否想过我们还有一大把的wcf服务想采用REST json格式来进行手机模块接口调用呢? 下面介绍通过WCF创建REST serveic ,你无需改变原有服务处理,只需要添加一些配

wcf 创建

WCF 作为可跨域 跨应用的服务工具会经常用到的地方很多,也会出现各种蛋疼的问题,以下是本人在使用WCF中所遇到的各种问题,最多遇到的就是部署iis上时候问题.希望能帮助到各位. 长话短说,简单的契约 contract 和service 创建我就不说了 ,直接说wcf创建, 一首先谈服务创建(有经验的可以略过观看此步骤):当我们创建一个可运行成功的svc文件时 就标志的我们的服务创建成功. 1.那么怎么创建一个svc文件,直接点击项目右键新建,找到wcf服务,这个文件的后缀就是.svc文件. 2

WCF创建简单程序

1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc,当然你也可以直接在这两个自动生成的文件中编码. 3.添加自定义的WCF[服务文件]User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的方法进行实现.代码如下: using System.ServiceMode

C#中使用WCF创建面向网络的服务程序

如题. 这种东西基于微软的一整套东西,在.NET内使用特别方便.利弊自行衡量,是否使用自行决定. 步骤1.创建一组在网上发布的方法 新建项目,类型选择“WCF服务应用程序”  在项目里,你可以补充任意的c#方法,例如:  注意:所有方法都必须在接口文件里有说明,否则无法发布.后面会提到. 至此,用户自定义方法完成.“调试”可以在iisexpress中发布: 浏览器里访问的情况如下图:  至此,服务发布成功.当然,通过iis正式发布是真实案例中最常用的方式. 步骤2.调用wcf服务. 核心:新建任

WCF服务部署到IIS7.5

下面介绍如何把WCF服务部署到IIS: 为WCF服务创建.svc文件 我们知道,每一个ASP.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用.与之类似,每个WCF服务也具有一个对应的文本文 件,其文件扩展名为.svc.基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体 现在对.svc文件的访问上. .svc文件的内容很简单,仅仅包含一个ServiceHost指令(Direct

【WCF全析(一)】--服务协定及消息模式

上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软战略之中,以后的.NET Developer就可以使用Vs开发Linux应用了,Developer又有了新的选择,从微软的战略转型也可以看出互联网已经步入到了新的模式,以后不再是PC的时代,移动互联和云时代已经到来. 最近做项目时使用到了WCF,项目把数据层和程序层进行了分割,相互之间的数据传输使用

【架构之路之WCF全析(一)】--服务协定及消息模式

上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软战略之中,以后的.NET Developer就可以使用Vs开发Linux应用了,Developer又有了新的选择,从微软的战略转型也可以看出互联网已经步入到了新的模式,以后不再是PC的时代,移动互联和云时代已经到来. 最近做项目时使用到了WCF,项目把数据层和程序层进行了分割,相互之间的数据传输使用

【踩坑(Running)填坑(ZSSURE)】:WCF学习之InstanceContextMode与ConcurrencyMode

背景: WCF可以看作是微软对SOA架构的一种实现,或者说WCF的存在让开发者更容易创建面向服务的程序.面向服务本身不是一种技术,而是设计和实现软件的一种架构方式.从最早的面向过程(PO).面向对象编程(OO),到后来的面向服务(SO).面向资源(RO)编程,本身没有本质区别,反映出的是人们认识世界的方法论的迭代进化. PO.OO.SO.RO,还有一个不沾边的O2O,各种概念层出不穷,在学习使用时要切忌混淆.今天这里记录的是在WCF框架下(面向服务架构--SOA--的一种实现),如何进行多线程及