平时很少写博文的,以前都是转载其他园友的文章,这几天有时间就自己尝试写一些wcf相关的文章,希望能给有需要的人带来一点帮助吧,水平有限再加上初次动手,写得不好还请多多包含!废话不多说了直接进入正题。

1.首先是项目结构(截图)命名不是很规范——仅自己练手用的

注意:WcfInterface是wcf的服务接口

ProductService是wcf的服务的实现

ProductSVCWebApp服务webapp

productservice.svc通过net.tcp绑定协议对外发布服务

messageservice.svc通过net.msmq绑定协议对外发布服务

主要是通过web.config中的servicemodel配置节点实现,该节点中主要分为3部分完全可通过手工配置:bindings绑定、behaviors行为、services服务配置对外发布的服务终结点endpoint——详情请见以下代码

ServiceModel是相关的数据契约

一、wcfinterface项目是独立的服务契约

1.IMessage服务接口

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.ServiceModel;
  7. using ServiceModel;
  8.  
  9. namespace WcfInterface
  10. {
  11. [ServiceContract]
  12. public interface IMessage
  13. {
  14. [OperationContract(IsOneWay=true)]
  15. void Send(Message log);
  16. }
  17. }

IMessage服务接口

2.IServiceTest服务接口

  1. using ServiceModel;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.ServiceModel;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace WcfInterface
  10. {
  11. [ServiceContract]
  12. public interface IServiceTest
  13. {
  14. [OperationContract]
  15. int AddProduct(Product product);
  16.  
  17. [OperationContract]
  18. Product GetProductById(int Id);
  19.  
  20. }
  21. }

IServiceTest服务接口

二、ProductService类库

1.IMessage的服务实现

  1. using ServiceModel;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using WcfInterface;
  8.  
  9. namespace ProductService
  10. {
  11. public class MsmqServiceTest:IMessage
  12. {
  13. private static IList<Message> list = new List<Message>();
  14.  
  15. public void Send(ServiceModel.Message log)
  16. {
  17. list.Add(log);
  18. }
  19. }
  20. }

MsmqServiceTest实现IMessage接口

2.IServiceTest服务

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using WcfInterface;
  7. using ServiceModel;
  8.  
  9. namespace ProductService
  10. {
  11. public class ProductImpl : IServiceTest
  12. {
  13. private static IList<Product> list = new List<Product>();
  14. public int AddProduct(Product product)
  15. {
  16. list.Add(product);
  17. return ;
  18. }
  19.  
  20. public Product GetProductById(int Id)
  21. {
  22. return list.FirstOrDefault(p => p.Id.Equals(Id));
  23. }
  24.  
  25. }
  26. }

IServiceTest服务契约的实现VProductImpl

三、数据契约类库ServiceModel

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ServiceModel
  9. {
  10. [DataContract]
  11. public class Product
  12. {
  13. [DataMember]
  14. public int Id { get; set; }
  15. [DataMember]
  16. public string Name { get; set; }
  17. [DataMember]
  18. public decimal Cost { get; set; }
  19. }
  20. }

Product实体

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Runtime.Serialization;
  7.  
  8. namespace ServiceModel
  9. {
  10. [DataContract]
  11. public class Message
  12. {
  13. [DataMember]
  14. public int Id { get; set; }
  15.  
  16. [DataMember]
  17. public string Header { get; set; }
  18.  
  19. [DataMember]
  20. public string Body { get; set; }
  21. }
  22. }

Message实体

四、ProductSVCWebapp

productservice.svc服务文件

<%@ ServiceHost Language="C#" Debug="true" Service="ProductService.MsmqServiceTest" %>

messageservice.svc服务文件

<%@ ServiceHost Language="C#" Debug="true" Service="ProductService.MsmqServiceTest" %>

web.config中servicemodel配置

  1. <system.serviceModel>
  2. <services>
  3. <service behaviorConfiguration="endpointbinding" name="ProductService.ProductImpl">
  4. <endpoint address="net.tcp://localhost/ProductService/ProductService.svc" binding="netTcpBinding" bindingConfiguration="tcpbindingtest" name="netTcpBinding_IServiceTest" contract="WcfInterface.IServiceTest"></endpoint>
  5. </service>
  6. <service name="ProductService.MsmqServiceTest">
  7. <endpoint address="net.msmq://localhost/private/ProductService/ProductService.svc" binding="netMsmqBinding" contract="WcfInterface.IMessage" bindingConfiguration="msmqbindingtest" name="netMsmqBinding_IMessage"></endpoint>
  8. </service>
  9. </services>
  10. <bindings>
  11. <netMsmqBinding>
  12. <binding name="msmqbindingtest" exactlyOnce="false">
  13. <security>
  14. <transport msmqProtectionLevel="None" msmqAuthenticationMode="None"/>
  15. <message clientCredentialType="None"/>
  16. </security>
  17. </binding>
  18. </netMsmqBinding>
  19. <netTcpBinding>
  20. <binding name="tcpbindingtest">
  21. <security mode="None">
  22. <transport protectionLevel="None" clientCredentialType="None"></transport>
  23. <message clientCredentialType="None" />
  24. </security>
  25. </binding>
  26. </netTcpBinding>
  27. </bindings>
  28. <behaviors>
  29. <serviceBehaviors>
  30. <behavior name="endpointbinding">
  31. <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
  32. <serviceDebug includeExceptionDetailInFaults="false" />
  33. </behavior>
  34. <behavior name="">
  35. <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
  36. <serviceDebug includeExceptionDetailInFaults="false" />
  37. </behavior>
  38. </serviceBehaviors>
  39. </behaviors>
  40. <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  41. multipleSiteBindingsEnabled="true" />
  42. </system.serviceModel>

web.config

由于我这里用到msmq,建立私有的消息队列名字和address="net.msmq://localhost/private/ProductService/ProductService.svc"里的名字对应起来

五、部署——IIS承载服务及iis中相关配置

服务app以及web站点都需要启用协议net.msmq/net.tcp,另外服务还需要添加msmq和tcp的绑定

我的iis配置ProductService服务建立在defaultweb site下默认的defaultweb site已经添加了net.tcp和net.msmq,http绑定等

testwcf部署web站点

服务运行截图:

本人QQ:443813032 如有不妥之处,还请指正,互相学习,共同进步!!!近期研究go lang中,go将超过java,c成为未来10年最流行的语言,有人说它是20世纪的c语言!希望更多的人加入,一起将go发扬光大!!!

实战WCF中net.tcp和net.msmq绑定协议的更多相关文章

  1. 跟我一起学WCF(10)——WCF中事务处理

    一.引言 好久没更新,总感觉自己欠了什么一样的,所以今天迫不及待地来更新了,因为后面还有好几个系列准备些,还有很多东西需要学习总结的.今天就来介绍下WCF对事务的支持. 二.WCF事务详解 2.1 事 ...

  2. 基于MSMQ绑定的WCF服务实现总结

    一. 创建消息队列    1 1) 创建一个非事物性的私有队列    1 2)设置消息队列访问权限    2 二.创建WCF服务并绑定消息队列    4 1)创建HelloService服务    4 ...

  3. WCF中事务处理

    一.引言 今天来介绍下WCF对事务的支持. 二.WCF事务详解 2.1 事务概念与属性 首先,大家在学习数据库的时候就已经接触到事务这个概念了.所谓事务,它是一个操作序列,这些操作要么都执行,要么都不 ...

  4. WCF初探-26:WCF中的会话

    理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调 ...

  5. WCF中常用的binding方式

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务.WSHttpBinding: 比 Basi ...

  6. WCF中的标准绑定

    使用过WCF的童鞋们都很清楚,绑定是必须的.我将这些绑定总结了下. 一.标准绑定简要说明 1.basicHttpBinding 基于WS-I Basic Profile 1.1 的web服务,所需的. ...

  7. C# WCF学习笔记(二)终结点地址与WCF寻址(Endpoint Address and WCF Addressing) WCF中的传输协议

    URI的全称是 Uniform Rosource Identifire(统一资源标识),它唯一标识一个确定的网绐资源,同时也表示资源所处的位置及访问的方式(资源访问所用的网络协议). 对于Endpoi ...

  8. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  9. WCF中常用的binding方式 z

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务. WSHttpBinding: 比 Bas ...

随机推荐

  1. JSP中的Cookie

    如何创建Cookie 先引包: import="javax.servlet.http.Cookie" JSP是使用如下的语法格式来创建cookie的: Cookie cookie_ ...

  2. request.getParameterMap() 获取表单提交的键值对 并且 也能获取动态表单的key

    Map<String,String[]> map = request.getParameterMap();Set<String> keys = map.keySet(); 获取 ...

  3. 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp

    题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...

  4. The XOR Largest Pair

    刷刷书上的例题 在给定的N个整数A1,A2……An中选出两个进行XOR运算,得到的结果最大是多少?N<=105,0<=Ai<231 SOlution: 我们思考到对于两个数相异或,是 ...

  5. 【转】如何解决每次打开office2010都会出现正在配置以及使用KMS

    转自:http://jingyan.baidu.com/article/90895e0fb1525964ec6b0bb5.html 一.使用mini-KMS_Activator_v1.2_Office ...

  6. 手动安装GCC

    01sunxiaoqiang的博客 Centos离线手动安装gcc.g++教程 转载 2016-11-06 17:35:18 标签:linux应用笔记 在安装LINUX系统的时候很可能会没有安装gcc ...

  7. 定时导出用户数据(expdp,impdp)

    一 定时导出数据: #!/bin/bash############################################################################### ...

  8. Spring学习--切面优先级及重用切点表达式

    指定切面的优先级: 在同一个链接点上应用不止一个切面时 , 除非明确指定 , 否则它们的优先级是不确定的. 切面的优先级可以通过实现 Ordered 接口或利用 @Order 注解指定. 实现 Ord ...

  9. Fragment使用--文章集锦

    android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态 Android Fragment 真正的完全解析(上) Android Fragment实 ...

  10. [洛谷P3501] [POI2010]ANT-Antisymmetry

    洛谷题目链接:[POI2010]ANT-Antisymmetry 题目描述 Byteasar studies certain strings of zeroes and ones. Let be su ...