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”。
//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创建到使用到发布的更多相关文章
- WCF 一步一步 发布 WCF服务 到 IIS (图)
WCF 一步一步 发布 WCF服务 到 IIS (图) 使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用. 下面我们来看一下如何在IIS中部发布一个WCF服务. ...
- C#中使用WCF创建面向网络的服务程序
如题. 这种东西基于微软的一整套东西,在.NET内使用特别方便.利弊自行衡量,是否使用自行决定. 步骤1.创建一组在网上发布的方法 新建项目,类型选择“WCF服务应用程序” 在项目里,你可以补充任意 ...
- Web Service 的创建简单编码、发布和部署
最近,老大准备将已有的C/S架构项目中的通信部分做成通用,需要将其支持WebService为以后项目向着B/S架构升级做好铺垫,为此身为屌丝的我去各种百度WebService是个什么卵玩意,然后逐渐搭 ...
- 使用WCF 创建 Rest service
REST SERVICE 允许客户端修改url路径,并且web端功过url 请求数据. 他使用http协议进行通讯,想必大家都知道 . 并且我们可以通过设置进行数据类型转换, 支持XML,JSON 格 ...
- 用C#基于WCF创建TCP的Service供Client端调用
本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...
- ROS学习记录(三)————创建一个简单的发布节点和订阅节点
暑假在家有些懈怠,不,非常懈怠- -||!良心已经发痛了,想快些补回原来的进度,但忽然发现,中断了一段时间再重新去学习,有的地方连最基本的符号都忘记了 ,这次特意弄个最最基础的,恢复一下,以前的进度. ...
- (转)MyEclipse10下创建web项目并发布到Tomcat
转自:http://blog.sina.com.cn/s/blog_699d3f1b01012spf.html MyEclipse10下创建web项目并发布到Tomcat 1.软件安装(不作详细描 ...
- MyEclipse10下创建web项目并发布到Tomcat
MyEclipse10下创建web项目并发布到Tomcat 1.软件安装(不作详细描述) 2.启动MyEclipse10 3.File-New-Project,选中Web Project,点击Next ...
- WCF创建简单程序
1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc,当然你也可以直接 ...
随机推荐
- Spring、Spring事务详解;使用XML配置事务
@Transactional可以设置以下参数: @Transactional(readOnly=false) // 指定事务是否只读的 true/false @Transactional(rollba ...
- app被Rejected 的各种原因翻译(转)
原文:http://www.cnblogs.com/sell/archive/2013/02/16/2913341.html 1. Terms and conditions(法律与条款) 1.1 As ...
- 我的RTOS 之六 -- Touch移植(s5pv210+threadx+ucgui+touch)
非常久没有关注RTOS了,所以也一直没有更新.近期闲了,把GPIO I2C调通了.简单移植了Touch.在S5PV210上使用. 调试I2C时.废了非常多周折,最后借助示波器才发现一个小小的错误.折腾 ...
- 使用Cloudsim实现基于多维QoS的资源调度算法之中的一个:配置Cloudsim环境
Cloudsim是一款开源的云计算仿真软件,它继承了网格计算仿真软件Gridsim的编程模型,支持云计算的研究和开发.它是一个自足的支持数据中心.服务代理人.调度和分配策略的平台,支持大型云计算的基础 ...
- JavaWeb Filter--过滤器 简介
本文转载自:http://blog.csdn.net/wanghuan203/article/details/7325651 过滤器就是在源数据和目的数据之间起过滤作用的中间件. Web应用中,在处理 ...
- 通过自定义注解反射生成SQL语句
----------------------------------------Program.cs---------------------------------------- using Sys ...
- JavaSE复习日记 : 循环终止语句(break/break outerFor/continue)
最近没网,但攒了几天的博客,这次逮到机会发博客,直接三篇走起; /* * 循环终止语句: break/ break outerFor/ continue */ /* * break语句 * 1. 用于 ...
- Python核心编程读笔 1
第一章 欢迎来到Python世界 1 Python特点: 高级的可进行系统调用的解释性语言 面向对象 可升级.扩展.移植 自动内存管理器(内存管理由Python解释器负责) 2 安装 Windows的 ...
- leetcode Search in Rotated Sorted Array python
#Suppose a sorted array is rotated at some pivot unknown to you beforehand. #(i.e., 0 1 2 4 5 6 7 ...
- 图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...