标签:
http://blog.csdn.net/suntanyong88/article/details/8203572
图1
1,展示下 控制台应用程序配置
web.config配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <appSettings> <add key="Travel" value="Data Source=服务器名;Initial Catalog=xxx;User ID=帐号;Password=密码;Asynchronous Processing=True;MultipleActiveResultSets=True"/> <add key="OrderTrackRouter" value="Data Source=服务器名;Initial Catalog=数据库名;User ID=帐号;Password=密码"/> </appSettings> <connectionStrings> </connectionStrings> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="Wcf.MyBehaviorConfiguration"> <serviceMetadata httpGetEnabled="false" /> <serviceDebug includeExceptionDetailInFaults="false" /> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <!-- wcf协议 --> <netTcpBinding> <binding name="netTcpBinding_Mybinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647 " maxBufferSize="2147483647 " maxConnections="10" maxReceivedMessageSize="2147483647 "> <readerQuotas maxDepth="64" maxStringContentLength="2147483647 " maxArrayLength="2147483647 " maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"></security> </binding> </netTcpBinding> </bindings> <services> <!--订单跟踪 --> <service name="OrderTrack.DAL.OrderTrackRouter_Service"> <endpoint address="net.tcp://127.0.0.1:6438/OrderTrack.DAL.OrderTrackRouter_Service" contract="OrderTrack.Interface.OrderTrackRouter_IService" binding="netTcpBinding" bindingConfiguration="netTcpBinding_Mybinding" /> </service> <!-- RTX跟踪 --> <service name="OrderTrack.DAL.RTXhistoryDAL"> <endpoint address="net.tcp://127.0.0.1:5789/OrderTrack.DAL.RTXhistoryDAL" contract="OrderTrack.Interface.IRTXhistoryDAL" binding="netTcpBinding" bindingConfiguration="netTcpBinding_Mybinding" /> </service> </services> <client> </system.serviceModel> </configuration>
注意事项: 1,wcf协议可以共用一个
2,tcp服务端口部署到服务器,端口号不能重复。重复之后,windows服务启动不了,会产生错误日志。出现服务启用不了,
修改 端口号,除了这个原因,还有别的原因也会导致服务启动不了。可以到事件查看器 查看对应错误,如:图2
右键点击错误日志属性查看错误
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using OrderTrack.DAL; /* 创建人 谈勇 2012-11-7 */ namespace OrderTrack.Windows.Service.WCFService { internal class RtxStartService { /// <summary> /// 创建服务主机对象 /// </summary> internal static ServiceHost serviceHost = null; /// <summary> /// 启动服务函数 /// </summary> internal static void StartService() { if (serviceHost != null) { serviceHost.Close(); } serviceHost = new ServiceHost(typeof(RTXhistoryDAL)); serviceHost.Open(); } /// <summary> /// 停止服务 /// </summary> internal static void StopService() { if (serviceHost != null) { serviceHost.Close(); serviceHost = null; } } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using OrderTrack.Windows.KZT.WCFService; namespace OrderTrack.Windows.KZT { partial class WindowsService : ServiceBase { /// <summary> /// 服务名称 /// </summary> internal const string SERVICE_NAME = "WCFServiceHost"; protected static void WCFServiceHost_Start() { //订单跟踪服务启动 OrderTrackRouter_WCFService.StartService(); //rtx 服务启动 RtxStartService.StartService(); } protected static void WCFServiceHost_Stop() { //调用服务停止函数 // WhetherStartService.StopService(); //rtx 服务关闭 //RtxStartService.StopService(); } public WindowsService() { //InitializeComponent(); ServiceName = SERVICE_NAME; } protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 WCFServiceHost_Start(); } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 WCFServiceHost_Stop(); } private static void RunAsConsole() { ///添加控制台TITLE Console.Title = "我的地盘听我的"; WCFServiceHost_Start(); Console.ReadKey(); //不做控制台程序可以 修改成 Consolse.Read(); } private static void RunAsService() { //Run(new WindowsService()); ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new WindowsService() }; ServiceBase.Run(ServicesToRun); } public static void Main() { if (Environment.UserInteractive) { RunAsConsole(); } else { RunAsService(); } } } }图3, 服务配置
图4 ,wcf接口的实现
<!-- RTX跟踪 --> <service name="OrderTrack.DAL.RTXhistoryDAL"> <endpoint address="net.tcp://127.0.0.1:5789/OrderTrack.DAL.RTXhistoryDAL" contract="OrderTrack.Interface.IRTXhistoryDAL" binding="netTcpBinding" bindingConfiguration="netTcpBinding_Mybinding" /> </service>
注意看图 4 和 协议的配置 是有关联的。
总结一下,wcf配置一定要细心,监听和协议有一点不一样,那个客户端 调用 服务器 接口 是 ping 不通的。
5. 展示客户端调用
要下载个 wcf插件
ACorns.WCF.DynamicClientProxy 文件 可以用一个专门的类型去封装 那个 wcf插件文件包
客户端引用 只要拿 那个 dll文件就行。
总结:编写wcf接口服务 调用 设计的越简单越好,这样别人拿到你的接口 ,引用几个 dll文件。就能实现你接口的方法 完成对应功能。
<?xml version="1.0"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <connectionStrings /> <system.web> <compilation debug="true" targetFramework="4.0" /> <authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" timeout="2880" /> </authentication> <membership> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> <profile> <providers> <clear/> <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/> </providers> </profile> <roleManager enabled="false"> <providers> <clear/> <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> </providers> </roleManager> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> <!-- wcf 配置 begin--> <system.serviceModel> <bindings> <netTcpBinding> <binding name="netTcpBinding_Mybinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647 " maxBufferSize="2147483647 " maxConnections="10" maxReceivedMessageSize="2147483647 "> <readerQuotas maxDepth="64" maxStringContentLength="2147483647 " maxArrayLength="2147483647 " maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"></security> </binding> </netTcpBinding> </bindings> <client> <!-- 订单跟踪 --> <endpoint address="net.tcp://127.0.0.1:6438/OrderTrack.DAL.OrderTrackRouter_Service" contract="OrderTrack.Interface.OrderTrackRouter_IService" binding="netTcpBinding" bindingConfiguration="netTcpBinding_Mybinding" name="orderTrack"/> <!-- RTX跟踪 --> <endpoint address="net.tcp://127.0.0.1:5789/OrderTrack.DAL.RTXhistoryDAL" contract="OrderTrack.Interface.IRTXhistoryDAL" binding="netTcpBinding" bindingConfiguration="netTcpBinding_Mybinding" name="rtxTrack"/> </client> </system.serviceModel> <!-- wcf 配置 end--> </configuration>
客户端后台调用 展示 追加RTX记录方法
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Uzai.OrderTrack.Interface; using ACorns.WCF.DynamicClientProxy; using OrderTrack.DataEntities; namespace WcfWebApplication { public partial class RTXTrackTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { RTXWcfNetTcp(); } public void RTXWcfNetTcp() { IRTXhistoryDAL iwt = WCFClientProxy<IRTXhistoryDAL>.GetReusableFaultUnwrappingInstance("rtxTrack"); RTXhistory model = new RTXhistory(); model.orderType = TrackOrderEnum.MeteradJustable; model.objorderModel.ordercode = "N23151234"; model.objorderModel.dateofDeparture = DateTime.Now; model.objorderModel.Person = 2; model.objorderModel.Child = 1; model.objorderModel.productId = 4788; model.objorderModel.productName = "菲律宾一日游"; model.objorderModel.prodcutPrice = 4888.88m; model.objorderModel.OPAdminID = "581"; model.objorderModel.OPAdmin = "tanyong"; model.objorderModel.JDAdminID = "581"; model.objorderModel.JDAdmin = "tanyong"; string strResult = iwt.addRtxHostory(model); Response.Write(strResult); } } }
//这个是rtxTrack是webConfig 协议的name
标签:
原文地址:http://www.cnblogs.com/qq260250932/p/5336670.html