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”。
//OracleServe()中读取配置文件解析
//IIS中运行的时候以组件的形式添加至WCF服务网站中,故运行的时候读取WCF服务网站中的配置文件(Web.config)
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,生成解决方案

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

6,右击WCF网站添加引用

7,在弹出框中找到点击项目在右边找到刚才创建的类库组件添加(以下图片只做演示流程与实际项目不一样)

(出现类似此图则成功)

8,若果没有添加引用册出现如下图的错误

9,更改网站信息,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>

9.*1,修改配额的数据可以参考app.config(类库中或项目中)

9.*2,修改配额之后也需要在客户端修改传输配额(下面从别的地方选取已做参考)

<system.serviceModel>
<behaviors />
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ISqlService" receiveTimeout="00:05:00"
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" >
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:9755/Service.svc/basic"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISqlService"
contract="SQLService.ISqlService" name="BasicHttpBinding_ISqlService" />
</client>
</system.serviceModel>

 解析

BasicHttpBinding_ISqlService这个是添加引用自动生成的
address="http://localhost:9755/Service.svc/basic 和 SQLService.ISqlService
这是二个均可以在app.config中找到,
basicHttpBinding
这一个是关于绑定配额用basicHttpBinding绑定LargeDataTransferServicesBinding,LargeDataTransferServicesBinding又配置数据,
注意客户端的basinHttpBinding和LargeDataTransferServicesBinding与WCF服务网站中的配置名字一样

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

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

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

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

<?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>

12,右击解决方案创建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

  

WCF创建到使用到发布的更多相关文章

  1. WCF 一步一步 发布 WCF服务 到 IIS (图)

    WCF 一步一步 发布 WCF服务 到 IIS (图) 使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用. 下面我们来看一下如何在IIS中部发布一个WCF服务. ...

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

    如题. 这种东西基于微软的一整套东西,在.NET内使用特别方便.利弊自行衡量,是否使用自行决定. 步骤1.创建一组在网上发布的方法 新建项目,类型选择“WCF服务应用程序”  在项目里,你可以补充任意 ...

  3. Web Service 的创建简单编码、发布和部署

    最近,老大准备将已有的C/S架构项目中的通信部分做成通用,需要将其支持WebService为以后项目向着B/S架构升级做好铺垫,为此身为屌丝的我去各种百度WebService是个什么卵玩意,然后逐渐搭 ...

  4. 使用WCF 创建 Rest service

    REST SERVICE 允许客户端修改url路径,并且web端功过url 请求数据. 他使用http协议进行通讯,想必大家都知道 . 并且我们可以通过设置进行数据类型转换, 支持XML,JSON 格 ...

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

    本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...

  6. ROS学习记录(三)————创建一个简单的发布节点和订阅节点

    暑假在家有些懈怠,不,非常懈怠- -||!良心已经发痛了,想快些补回原来的进度,但忽然发现,中断了一段时间再重新去学习,有的地方连最基本的符号都忘记了 ,这次特意弄个最最基础的,恢复一下,以前的进度. ...

  7. (转)MyEclipse10下创建web项目并发布到Tomcat

    转自:http://blog.sina.com.cn/s/blog_699d3f1b01012spf.html   MyEclipse10下创建web项目并发布到Tomcat 1.软件安装(不作详细描 ...

  8. MyEclipse10下创建web项目并发布到Tomcat

    MyEclipse10下创建web项目并发布到Tomcat 1.软件安装(不作详细描述) 2.启动MyEclipse10 3.File-New-Project,选中Web Project,点击Next ...

  9. WCF创建简单程序

    1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc,当然你也可以直接 ...

随机推荐

  1. Python学习笔记3-文件的简单操作

    Python中的文件操作 Python中文件打操作离不开两个模块  os 和 shutil os:操作文件.目录: Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话, ...

  2. WinForm 窗体与窗体相互嵌套

    只要将要被潜逃的的窗体的TopLeve设置为Flase即可像普通的控件一样,被添加到另外一个窗体中,TopLeve:是否为顶级窗口,下面来看代码: public partial class TTFor ...

  3. [转]Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱 【转】

    在Asp.Net MVC 1.0编程中,我们经常遇见这样的场景,在新建一个对象时候,通过HtmlHelper的方式在View模型中渲染Html控件,当填写完相关内容后,通过Form把需要新建的内容Po ...

  4. Android SQLite Database Tutorial

    表名: 列(字段): 联系人实体类:构造方法,setters .getters方法 File:   Contact.java package com.example.sqlitetest; publi ...

  5. 艰苦的RAW格式数据恢复之旅

    艰苦的RAW格式数据恢复之旅 1.RAW 格式形成原因 2.RAW 格式的解决的方法 经验之谈: 1.RAW 格式形成原因 关于形成的原因,在网上搜索了下,千奇百怪的都有,就不一一诉说了,可是有果必有 ...

  6. ServiceStack 入门(一)

    本文主要介绍ServiceStack的安装,与第一个项目的创建. 详细了解ServiceStack,可参考官方网站: https://servicestack.net/ , Github上Servic ...

  7. VB.NET函数——数学函数/字母串函数

    一.数学函数 函数 说明 Abs (num) 取绝对值. Exp (num) 返回以e为底.以num为指数的值,如Exp(2)返回e^2值. Log (num) 返回参数num的自然对数值,为Doub ...

  8. Web 应用性能提升 10 倍的 10 个建议

    转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...

  9. CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关

    链接地址:http://blog.csdn.net/jemlee2002/article/details/7042991 CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作 ...

  10. OC语法2——OC的类,方法,成员变量的创建

    类的创建: 与Java不同的是,OC创建一个类需要两个文件(.h和.m文件) 1> xxx.h:声明文件.用于声明成员变量和方法.关键字@interface和@end成对使用. 声明文件只是声明 ...