首页 技术 正文
技术 2022年11月10日
0 收藏 864 点赞 4,613 浏览 9083 个字

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

WCF创建到使用到发布

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

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服务

WCF创建到使用到发布

WCF创建到使用到发布

6,右击WCF网站添加引用

WCF创建到使用到发布

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

WCF创建到使用到发布

WCF创建到使用到发布

(出现类似此图则成功)

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

WCF创建到使用到发布

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服务文件拷贝至服务器中

WCF创建到使用到发布

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

WCF创建到使用到发布

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

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

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902