From 190c1b18a4fae837f25781755fd0e1f57d7d1bf8 Mon Sep 17 00:00:00 2001 From: ddlucky Date: Thu, 14 Mar 2024 14:07:41 +0800 Subject: [PATCH] 20240314 --- DSWeb.Common/DB/Comm.cs | 43 + DSWeb.Common/DB/CommonDataContext.cs | 4 +- DSWeb.Common/DB/DS6Comm.cs | 1022 +++ DSWeb.Common/DB/DS6DataContext.cs | 47 + DSWeb.Common/DSWeb.Common.csproj | 2 + .../Controllers/BasicDataRefController.cs | 9 +- DSWeb/Areas/CommMng/DAL/BasicDataRefDAL.cs | 96 +- DSWeb/Areas/CommMng/DAL/PubSysDAL.cs | 2816 +++++++ .../MvcShipping/Models/MsOpSeae/MsOpSeae.cs | 4 + .../Models/MsOpSeae/MsOpSeaeDetail.cs | 4 + .../Viewsjs/MsOpSeae/MsOpSeaeEdit.js | 299 +- .../MvcShipping/Viewsjs/MsOpSeae/Zi_zh-cn.js | 1 + DSWeb/DSWeb.csproj | 3 + DSWeb/Global.asax.cs | 173 + DSWeb/Web.config | 22 + DSWeb/bin/RabbitMQ.Client.dll | Bin 0 -> 265728 bytes DSWeb/bin/RabbitMQ.Client.xml | 6743 +++++++++++++++++ DSWeb/packages.config | 1 + packages/RabbitMQ.Client.3.6.9/.signature.p7s | Bin 0 -> 9484 bytes .../RabbitMQ.Client.3.6.9.nupkg | Bin 0 -> 299021 bytes .../lib/net45/RabbitMQ.Client.dll | Bin 0 -> 265728 bytes .../lib/net45/RabbitMQ.Client.xml | 6743 +++++++++++++++++ .../lib/netcore45/RabbitMQ.Client.dll | Bin 0 -> 264192 bytes .../lib/netcore45/RabbitMQ.Client.xml | 6597 ++++++++++++++++ 24 files changed, 24513 insertions(+), 116 deletions(-) create mode 100644 DSWeb.Common/DB/DS6Comm.cs create mode 100644 DSWeb.Common/DB/DS6DataContext.cs create mode 100644 DSWeb/bin/RabbitMQ.Client.dll create mode 100644 DSWeb/bin/RabbitMQ.Client.xml create mode 100644 packages/RabbitMQ.Client.3.6.9/.signature.p7s create mode 100644 packages/RabbitMQ.Client.3.6.9/RabbitMQ.Client.3.6.9.nupkg create mode 100644 packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.dll create mode 100644 packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.xml create mode 100644 packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.dll create mode 100644 packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.xml diff --git a/DSWeb.Common/DB/Comm.cs b/DSWeb.Common/DB/Comm.cs index ea526b5e..afe4f60c 100644 --- a/DSWeb.Common/DB/Comm.cs +++ b/DSWeb.Common/DB/Comm.cs @@ -2030,6 +2030,36 @@ namespace DSWeb.Common.DB #endregion } + [Table("code_goods")] + public partial class code_goods_md + { + [Key] + public string GID { get; set; } + public string GOODCODE { get; set; } + public string GOODNAME { get; set; } + public string DESCRIP { get; set; } + public decimal? ARRATE { get; set; } + public decimal? APRATE { get; set; } + public decimal? AROUTRATE { get; set; } + public decimal? APOUTRATE { get; set; } + public bool? ISSTOP { get; set; } + public string GoodsTypeGID { get; set; } + public string GOODNO { get; set; } + public string CREATEUSER { get; set; } + public DateTime? CREATETIME { get; set; } + public string CORPID { get; set; } + public string GOODSFEETYPE { get; set; } + public string RULEUNIT { get; set; } + public string RULEUNIT2 { get; set; } + public string RULEUNIT1 { get; set; } + public string ENAME { get; set; } + public string HSCODE { get; set; } + + #region 外键 => 导航属性,ManyToMany + + #endregion + } + /// ///2E5E6066-1C5D-4B04-BF8C-56637C20FC8C 是否允许使用本系统 ///31AC11C1-D005-46EC-A0EE-05BC211AE1B7 是否操作 @@ -3436,4 +3466,17 @@ namespace DSWeb.Common.DB public string MNGBLSTATUS { get; set; } public string ISCHAOQI { get; set; } } + + [Table("code_cust_edi")] + public class CodeCustEdi + { + [Key] + public string GID { get; set; } + public string CUST { get; set; } + public string EDICODE { get; set; } + public string EDINAME { get; set; } + public string REMARK { get; set; } + public string CREATEUSER { get; set; } + public DateTime? CREATETIME { get; set; } + } } \ No newline at end of file diff --git a/DSWeb.Common/DB/CommonDataContext.cs b/DSWeb.Common/DB/CommonDataContext.cs index 15516f7c..499a4db6 100644 --- a/DSWeb.Common/DB/CommonDataContext.cs +++ b/DSWeb.Common/DB/CommonDataContext.cs @@ -51,7 +51,7 @@ namespace DSWeb.Common.DB public DbSet ch_fee_invoiceapplication { get; set; } public DbSet code_goods_inv { get; set; } - + public DbSet code_goods { get; set; } public DbSet ch_fee_do { get; set; } public DbSet company { get; set; } @@ -119,6 +119,8 @@ namespace DSWeb.Common.DB public DbSet op_blissuelist_Detail { get; set; } public DbSet op_blissuelist { get; set; } public DbSet v_op_blissuelist_Detail { get; set; } + + public DbSet CodeCustEdi { get; set; } } diff --git a/DSWeb.Common/DB/DS6Comm.cs b/DSWeb.Common/DB/DS6Comm.cs new file mode 100644 index 00000000..2b1b5d35 --- /dev/null +++ b/DSWeb.Common/DB/DS6Comm.cs @@ -0,0 +1,1022 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Web; + +namespace DSWeb.Common.DB +{ + + + [Table("t_crm_client")] + public partial class t_crm_client_md + { + [Key] + public string 客户简称 { get; set; } + public string 客户状态 { get; set; } + public string 客户价值 { get; set; } + public string 客户性质 { get; set; } + public int? 结费期限 { get; set; } + public string 代码 { get; set; } + public string EDI代码 { get; set; } + public string 客户全称 { get; set; } + public string 通讯地址 { get; set; } + public string 邮箱 { get; set; } + public string 网站 { get; set; } + public string 电话 { get; set; } + public string 传真 { get; set; } + public string 揽货人 { get; set; } + public string 法人 { get; set; } + public string 营业执照 { get; set; } + public string 国税登记 { get; set; } + public string 地税登记 { get; set; } + public string 开户行USD { get; set; } + public string 帐号USD { get; set; } + public string 开户行RMB { get; set; } + public string 帐号RMB { get; set; } + public string 发票抬头 { get; set; } + public string 企业规模 { get; set; } + public string 业务货量 { get; set; } + public string 出口区域 { get; set; } + public string 业务区域 { get; set; } + public string 出口箱型 { get; set; } + public string 货物名称 { get; set; } + public string 报关名称 { get; set; } + public string 海关编码 { get; set; } + public string 商品编码 { get; set; } + public bool? 是否商检 { get; set; } + public bool? 是否熏蒸 { get; set; } + public bool? 是否报关 { get; set; } + public string 报关习惯 { get; set; } + public string 运价要求 { get; set; } + public string 付费习惯 { get; set; } + public string 结费方式 { get; set; } + public string 发票要求 { get; set; } + public string 船公司要求 { get; set; } + public string 提单要求 { get; set; } + public string 结费习惯 { get; set; } + public string 派车习惯 { get; set; } + public string 操作习惯 { get; set; } + public string 注重环节 { get; set; } + public string 评价分析 { get; set; } + public string 其他要求 { get; set; } + public string 录入人 { get; set; } + public DateTime? 录入日期 { get; set; } + public string 快捷代码 { get; set; } + public string 备注 { get; set; } + public bool? 船公司 { get; set; } + public bool? 场站 { get; set; } + public bool? 车队 { get; set; } + public bool? 报关行 { get; set; } + public bool? 委托单位 { get; set; } + public bool? 代理 { get; set; } + public bool? 货代 { get; set; } + public bool? 收货人 { get; set; } + public bool? 发货人 { get; set; } + public bool? 通知人 { get; set; } + public bool? 航空公司 { get; set; } + public bool? 其他客户 { get; set; } + public string 客服员 { get; set; } + public bool? 快递公司 { get; set; } + public string 行业类型 { get; set; } + public DateTime? 登记日期 { get; set; } + public string 美元支票抬头 { get; set; } + public string 人民币支票抬头 { get; set; } + public string 结费类型 { get; set; } + public string 类型模式 { get; set; } + public string 日期模式 { get; set; } + public decimal? 结费金额 { get; set; } + public int? 结费日期 { get; set; } + public int? 结费开始 { get; set; } + public int? 结费结束 { get; set; } + public int? 结费开始2 { get; set; } + public int? 结费结束2 { get; set; } + public int? 结费日期2 { get; set; } + public DateTime? 结费开始日期 { get; set; } + public decimal? 退佣标准 { get; set; } + public decimal? 默认税率 { get; set; } + public string 国家 { get; set; } + public string 洲 { get; set; } + public string 城市 { get; set; } + public string IGZ代码 { get; set; } + public bool? 船代 { get; set; } + public int? 结费优惠期限 { get; set; } + public string 帐龄状态 { get; set; } + public string 订舱系统序列号 { get; set; } + public bool? 订舱代理 { get; set; } + public string 外运代码 { get; set; } + public string 英文全称 { get; set; } + public string 企业代码 { get; set; } + public string 国家代码 { get; set; } + public string VGM代码 { get; set; } + //public string 放单状态 { get; set; } + public string 扣单状态 { get; set; } + public string 大简云代码 { get; set; } + public string 客商编码 { get; set; } + + //public string bizCsCustId { get; set; } + + } + + [Table("t_sys_employee")] + public partial class t_sys_employee_md + { + public string 部门名称 { get; set; } + [Key] + public string 姓名 { get; set; } + public string 密码 { get; set; } + public string 固定电话 { get; set; } + public string 移动电话 { get; set; } + public string 传真 { get; set; } + public string 邮箱 { get; set; } + public DateTime? 出生日期 { get; set; } + public string 家庭电话 { get; set; } + public string 家庭住址 { get; set; } + public string 备注 { get; set; } + public bool? 应收 { get; set; } + public bool? 应付 { get; set; } + public bool? 利润 { get; set; } + public string 代码 { get; set; } + public bool? 停用 { get; set; } + public string 提成方案 { get; set; } + public DateTime? 启用日期 { get; set; } + public DateTime? 停用日期 { get; set; } + public string 订舱系统序列号 { get; set; } + public string 分部名称 { get; set; } + public string 大简云代码 { get; set; } + } + + [Table("t_op_seae")] + public partial class t_op_seae_md + { + [Key] + public string 编号 { get; set; } + public string 主编号 { get; set; } + public string 业务状态 { get; set; } + public string 费用状态 { get; set; } + public string 业务编号 { get; set; } + public DateTime? 会计期间 { get; set; } + public int? 周次 { get; set; } + public string 主提单号 { get; set; } + public string 分提单号 { get; set; } + //public string 委托编号 { get; set; } + public string 装运方式 { get; set; } + public string 委托单位 { get; set; } + //public string 发货人 { get; set; } + //public string 收货人 { get; set; } + //public string 通知人 { get; set; } + public string 发货人代码 { get; set; } + public string 收货人代码 { get; set; } + public string 通知人代码 { get; set; } + public string 代理 { get; set; } + //public string 代理内容 { get; set; } + public string 场站 { get; set; } + public string 船名 { get; set; } + public string 航次 { get; set; } + public DateTime? 开船日期 { get; set; } + public DateTime? 截港日期 { get; set; } + /// + /// 实际开船日期 + /// + public DateTime? 预抵日期 { get; set; } + //public string 起运港 { get; set; } + public string 装货港 { get; set; } + public string 装港代码 { get; set; } + public string 卸货港 { get; set; } + public string 卸货代码 { get; set; } + //public DateTime? 二程开船日期 { get; set; } + //public string 二程港口 { get; set; } + //public string 二程船名 { get; set; } + //public string 二程航次 { get; set; } + public string 目的地 { get; set; } + public string 交货地点 { get; set; } + public string 交货代码 { get; set; } + public string 提单份数 { get; set; } + public string 签单方式 { get; set; } + public string 签单地点 { get; set; } + public DateTime? 签单日期 { get; set; } + public string 付费方式 { get; set; } + public string 预付地点 { get; set; } + public string 到付地点 { get; set; } + public string 运输条款 { get; set; } + public string 唛头 { get; set; } + public string 箱号封号 { get; set; } + public string 件数包装 { get; set; } + public string 货物描述 { get; set; } + public string 货物名称 { get; set; } + public string 货物重量 { get; set; } + public string 货物尺码 { get; set; } + public int? 件数 { get; set; } + public string 包装 { get; set; } + public decimal? 重量 { get; set; } + public decimal? 尺码 { get; set; } + public string 件数大写 { get; set; } + public string 箱数大写 { get; set; } + public int? 箱型1 { get; set; } + public int? 箱型2 { get; set; } + public int? 箱型3 { get; set; } + public int? 箱型4 { get; set; } + public int? 箱型5 { get; set; } + public int? 箱型6 { get; set; } + public int? 箱型7 { get; set; } + public int? 箱型8 { get; set; } + public int? 箱型9 { get; set; } + public int? 箱型10 { get; set; } + //public int? 其他箱型 { get; set; } + public int? 箱TEU { get; set; } + public string 集装箱 { get; set; } + public string 录入人 { get; set; } + public DateTime? 录入日期 { get; set; } + public string 操作员 { get; set; } + public string 揽货人 { get; set; } + public string 客服员 { get; set; } + public string 航线 { get; set; } + public string 船公司 { get; set; } + public string 货代公司 { get; set; } + //public string 备注 { get; set; } + public string 报关行 { get; set; } + public string 承运车队 { get; set; } + //public string 分单列表 { get; set; } + public string 计费标准 { get; set; } + //public bool? 报关服务 { get; set; } + //public bool? 报验服务 { get; set; } + //public bool? 熏蒸服务 { get; set; } + //public bool? 仓储服务 { get; set; } + //public bool? 拖车服务 { get; set; } + //public DateTime? 报关日期 { get; set; } + //public string 报关员 { get; set; } + //public string 报关单号 { get; set; } + //public string 核销单号 { get; set; } + //public string 手册号 { get; set; } + //public string 经营单位 { get; set; } + //public string 单位代码 { get; set; } + public string 合同号 { get; set; } + //public string 报关备注 { get; set; } + //public bool? 是否退税 { get; set; } + //public DateTime? 退税日期 { get; set; } + //public bool? 是否通关 { get; set; } + //public DateTime? 通关日期 { get; set; } + public string 危险品分类 { get; set; } + public string 危险品编号 { get; set; } + public string 冷藏通风量 { get; set; } + //public string 温度单位 { get; set; } + public string 设置温度 { get; set; } + public string 最低温度 { get; set; } + public string 最高温度 { get; set; } + public string 货物标识 { get; set; } + //public string 发票号 { get; set; } + //public string 商品编码 { get; set; } + public string 销售部门 { get; set; } + public string 操作部门 { get; set; } + //public int? 工作量 { get; set; } + public string 业务来源 { get; set; } + //public bool? 核对提单 { get; set; } + //public bool? 柜检 { get; set; } + //public bool? 转关 { get; set; } + //public bool? 转船 { get; set; } + //public string 英文船期 { get; set; } + //public bool? 是否签单 { get; set; } + //public DateTime? 签回日期 { get; set; } + //public bool? 请求派车 { get; set; } + //public bool? 是否派车 { get; set; } + public DateTime? 派车日期 { get; set; } + //public DateTime? 三程开船日期 { get; set; } + //public string 三程港口 { get; set; } + //public string 三程船名 { get; set; } + //public string 三程航次 { get; set; } + public string 辅助字段一 { get; set; } + public string 辅助字段二 { get; set; } + public string 辅助字段三 { get; set; } + public string 辅助字段四 { get; set; } + //public bool? 是否解锁 { get; set; } + //public string 解锁人 { get; set; } + //public DateTime? 解锁日期 { get; set; } + //public decimal? 应收陆运 { get; set; } + //public decimal? 应付陆运 { get; set; } + //public decimal? 陆运利润 { get; set; } + //public DateTime? 二程取货日期 { get; set; } + //public DateTime? 二程到港日期 { get; set; } + //public DateTime? 三程取货日期 { get; set; } + //public DateTime? 三程到港日期 { get; set; } + public string 主提单标准 { get; set; } + public string 分提单标准 { get; set; } + public string 委托标准 { get; set; } + //public bool? 财务 { get; set; } + //public string 财务凭证 { get; set; } + public string 附加条款 { get; set; } + public string 备案号 { get; set; } + //public string 运抵国 { get; set; } + //public string 境内货源地 { get; set; } + //public string 批准文号 { get; set; } + //public string 成交方式 { get; set; } + //public decimal? 净重 { get; set; } + //public string 单价 { get; set; } + /// + /// 第一层包装皮重 + /// + public string 总价 { get; set; } + //public string 商品名称 { get; set; } + //public string 数量单位 { get; set; } + //public DateTime? 接单日期 { get; set; } + //public DateTime? 报检日期 { get; set; } + //public string 报检单号 { get; set; } + //public DateTime? 验货时间 { get; set; } + //public DateTime? 实验时间 { get; set; } + //public DateTime? 熏蒸时间 { get; set; } + //public DateTime? 出证时间 { get; set; } + //public string 实验内容 { get; set; } + //public string 报关操作 { get; set; } + //public string 报检操作 { get; set; } + //public string 币制 { get; set; } + //public string 单证信息 { get; set; } + public string 核销标准 { get; set; } + public string 报关标准 { get; set; } + public string 报检标准 { get; set; } + //public bool? 是否寄单 { get; set; } + //public DateTime? 寄单日期 { get; set; } + public string 目的地代码 { get; set; } + //public string 包装代码 { get; set; } + //public string 发货人编号 { get; set; } + public string 运输方式 { get; set; } + public bool? 是否自有箱 { get; set; } + public string 运费协议号 { get; set; } + public string 航线操作 { get; set; } + public string 航线管理 { get; set; } + //public string 分票编号 { get; set; } + //public string 拼箱类型 { get; set; } + //public string 特殊要求 { get; set; } + //public bool? 是否放单 { get; set; } + //public bool? 已出号 { get; set; } + //public bool? 已订舱 { get; set; } + //public bool? 已放箱 { get; set; } + //public bool? 已背箱 { get; set; } + public string EDI备注 { get; set; } + public string 第三方付费 { get; set; } + //public bool? 是否商检换证 { get; set; } + //public DateTime? 换证日期 { get; set; } + //public bool? 是否客户入货 { get; set; } + //public DateTime? 客户入货日期 { get; set; } + //public bool? 是否出通关单 { get; set; } + //public DateTime? 商检通关日期 { get; set; } + //public bool? 是否客户派车 { get; set; } + //public DateTime? 客户派车日期 { get; set; } + //public bool? 是否回货 { get; set; } + //public DateTime? 回货日期 { get; set; } + public string 订舱人说明 { get; set; } + //public DateTime? 到港日期 { get; set; } + public string 真提单号 { get; set; } + public string 合同号备注 { get; set; } + public string 箱使堆存 { get; set; } + public string HS编码 { get; set; } + //public string 湿度 { get; set; } + //public string 方案名称 { get; set; } + public string 船代 { get; set; } + public string 单证员 { get; set; } + //public bool? 业务解锁 { get; set; } + //public string 业务解锁人 { get; set; } + //public DateTime? 业务解锁日期 { get; set; } + //public string 结费类型 { get; set; } + //public string 扣单状态 { get; set; } + //public DateTime? 应结日期 { get; set; } + public string 订舱序列号 { get; set; } + //public string 销售订舱说明 { get; set; } + //public string 场站联系人 { get; set; } + //public DateTime? 截单日期 { get; set; } + //public string 其他相关公司 { get; set; } + public string 副本提单份数 { get; set; } + //public string 放单状态 { get; set; } + //public bool? FEE2 { get; set; } + public bool? 通知到港 { get; set; } + public bool? 是否提货 { get; set; } + public string 是否占舱 { get; set; } + public string 占舱备注 { get; set; } + //public int? 申请堆存 { get; set; } + //public int? 批准堆存 { get; set; } + //public int? 申请箱使 { get; set; } + //public int? 批准箱使 { get; set; } + //public int? 申请插电 { get; set; } + //public int? 批准插电 { get; set; } + + public DateTime? ETA { get; set; } + //public DateTime? ATA { get; set; } + public DateTime? ETD { get; set; } + //public DateTime? 预配日期 { get; set; } + //public DateTime? 海关放行 { get; set; } + //public DateTime? 装载放行 { get; set; } + //public DateTime? 外理放行 { get; set; } + //public DateTime? 码头放行 { get; set; } + //public DateTime? 海关查验 { get; set; } + //public string 扣单原因 { get; set; } + //public string 扣放单操作人 { get; set; } + //public DateTime? 扣放单操作时间 { get; set; } + //public string 放单原因 { get; set; } + //public bool? 是否AMS录入 { get; set; } + //public DateTime? AMS录入日期 { get; set; } + + + //public string 是否1Y { get; set; } + //public string @1Y日期 {get;set;} + //public string 是否3Z { get; set; } + //public string @3Z日期 {get;set;} + public bool? 是否提交VGM { get; set; } + public bool? 是否提交舱单 { get; set; } + public bool? 是否装载放行 { get; set; } + public string 其他备注 { get; set; } + + //public DateTime? 费用封帐日期 { get; set; } + //public bool? 是否费用解封 { get; set; } + //public string 费用解封人 { get; set; } + //public DateTime? 费用解封日期 { get; set; } + + public long? DJYID { get; set; } + public string DJYVERSION { get; set; } + } + + + [Table("t_op_seae_assistant")] + public partial class t_op_seae_assistant_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int AS_ID { get; set; } + /// + /// 仅用于容纳大简云报文中children节点的元素中的bsno + /// + public string BSNO { get; set; } + + public string 编号 { get; set; } + public string 主编号 { get; set; } + public string 业务状态 { get; set; } + public string 费用状态 { get; set; } + public string 业务编号 { get; set; } + public DateTime? 会计期间 { get; set; } + public int? 周次 { get; set; } + public string 主提单号 { get; set; } + public string 分提单号 { get; set; } + public string 委托编号 { get; set; } + public string 装运方式 { get; set; } + public string 委托单位 { get; set; } + public string 发货人 { get; set; } + public string 收货人 { get; set; } + public string 通知人 { get; set; } + public string 发货人代码 { get; set; } + public string 收货人代码 { get; set; } + public string 通知人代码 { get; set; } + public string 代理 { get; set; } + public string 代理内容 { get; set; } + public string 场站 { get; set; } + public string 船名 { get; set; } + public string 航次 { get; set; } + public DateTime? 开船日期 { get; set; } + public DateTime? 截港日期 { get; set; } + public DateTime? 预抵日期 { get; set; } + public string 起运港 { get; set; } + public string 装货港 { get; set; } + public string 装港代码 { get; set; } + public string 卸货港 { get; set; } + public string 卸货代码 { get; set; } + public DateTime? 二程开船日期 { get; set; } + public string 二程港口 { get; set; } + public string 二程船名 { get; set; } + public string 二程航次 { get; set; } + public string 目的地 { get; set; } + public string 交货地点 { get; set; } + public string 交货代码 { get; set; } + public string 提单份数 { get; set; } + public string 签单方式 { get; set; } + public string 签单地点 { get; set; } + public DateTime? 签单日期 { get; set; } + public string 付费方式 { get; set; } + public string 预付地点 { get; set; } + public string 到付地点 { get; set; } + public string 运输条款 { get; set; } + public string 唛头 { get; set; } + public string 箱号封号 { get; set; } + public string 件数包装 { get; set; } + public string 货物描述 { get; set; } + public string 货物名称 { get; set; } + public string 货物重量 { get; set; } + public string 货物尺码 { get; set; } + public int? 件数 { get; set; } + public string 包装 { get; set; } + public decimal? 重量 { get; set; } + public decimal? 尺码 { get; set; } + public string 件数大写 { get; set; } + public string 箱数大写 { get; set; } + public int? 箱型1 { get; set; } + public int? 箱型2 { get; set; } + public int? 箱型3 { get; set; } + public int? 箱型4 { get; set; } + public int? 箱型5 { get; set; } + public int? 箱型6 { get; set; } + public int? 箱型7 { get; set; } + public int? 箱型8 { get; set; } + public int? 箱型9 { get; set; } + public int? 箱型10 { get; set; } + public int? 其他箱型 { get; set; } + public int? 箱TEU { get; set; } + public string 集装箱 { get; set; } + public string 录入人 { get; set; } + public DateTime? 录入日期 { get; set; } + public string 操作员 { get; set; } + public string 揽货人 { get; set; } + public string 客服员 { get; set; } + public string 航线 { get; set; } + public string 船公司 { get; set; } + public string 货代公司 { get; set; } + public string 备注 { get; set; } + public string 报关行 { get; set; } + public string 承运车队 { get; set; } + public string 分单列表 { get; set; } + public string 计费标准 { get; set; } + public bool? 是否报关 { get; set; } + public bool? 是否报验 { get; set; } + public bool? 是否熏蒸 { get; set; } + public DateTime? 报关日期 { get; set; } + public string 报关员 { get; set; } + public string 报关单号 { get; set; } + public string 核销单号 { get; set; } + public string 手册号 { get; set; } + public string 经营单位 { get; set; } + public string 单位代码 { get; set; } + public string 合同号 { get; set; } + public string 报关备注 { get; set; } + public bool? 是否有单证 { get; set; } + public bool? 退还我司 { get; set; } + public DateTime? 退还日期 { get; set; } + public bool? 归还客户 { get; set; } + public DateTime? 归还日期 { get; set; } + public bool? 是否退税 { get; set; } + public DateTime? 退税日期 { get; set; } + public bool? 是否通关 { get; set; } + public DateTime? 通关日期 { get; set; } + public string 危险品分类 { get; set; } + public string 危险品编号 { get; set; } + public string 冷藏通风量 { get; set; } + public string 温度单位 { get; set; } + public string 设置温度 { get; set; } + public string 最低温度 { get; set; } + public string 最高温度 { get; set; } + public string 货物标识 { get; set; } + public string 发票号 { get; set; } + public string 商品编码 { get; set; } + public string 销售部门 { get; set; } + public string 操作部门 { get; set; } + public int? 工作量 { get; set; } + public bool? 核对提单 { get; set; } + public bool? 柜检 { get; set; } + public bool? 转关 { get; set; } + public bool? 转船 { get; set; } + public string 英文船期 { get; set; } + public bool? 是否签单 { get; set; } + public DateTime? 签回日期 { get; set; } + public bool? 请求派车 { get; set; } + public bool? 是否派车 { get; set; } + public DateTime? 派车日期 { get; set; } + public DateTime? 三程开船日期 { get; set; } + public string 三程港口 { get; set; } + public string 三程船名 { get; set; } + public string 三程航次 { get; set; } + public string 辅助字段一 { get; set; } + public string 辅助字段二 { get; set; } + public string 辅助字段三 { get; set; } + public string 辅助字段四 { get; set; } + public bool? 是否解锁 { get; set; } + public string 解锁人 { get; set; } + public DateTime? 解锁日期 { get; set; } + public decimal? 应收陆运 { get; set; } + public decimal? 应付陆运 { get; set; } + public decimal? 陆运利润 { get; set; } + public DateTime? 二程取货日期 { get; set; } + public DateTime? 二程到港日期 { get; set; } + public DateTime? 三程取货日期 { get; set; } + public DateTime? 三程到港日期 { get; set; } + public string 主提单标准 { get; set; } + public string 分提单标准 { get; set; } + public string 委托标准 { get; set; } + public bool? 财务 { get; set; } + public string 财务凭证 { get; set; } + public string 附加条款 { get; set; } + public string 备案号 { get; set; } + public string 运抵国 { get; set; } + public string 境内货源地 { get; set; } + public string 批准文号 { get; set; } + public string 成交方式 { get; set; } + public decimal? 净重 { get; set; } + public decimal? 单价 { get; set; } + public decimal? 总价 { get; set; } + public string 商品名称 { get; set; } + public string 数量单位 { get; set; } + public DateTime? 接单日期 { get; set; } + public DateTime? 报检日期 { get; set; } + public DateTime? 报检单号 { get; set; } + public DateTime? 验货时间 { get; set; } + public DateTime? 实验时间 { get; set; } + public DateTime? 熏蒸时间 { get; set; } + public DateTime? 出证时间 { get; set; } + public string 实验内容 { get; set; } + public string 报关操作 { get; set; } + public string 报检操作 { get; set; } + public string 币制 { get; set; } + public string 单证信息 { get; set; } + public string 核销标准 { get; set; } + public string 报关标准 { get; set; } + public string 报检标准 { get; set; } + public bool? 是否寄单 { get; set; } + public DateTime? 寄单日期 { get; set; } + public string 目的地代码 { get; set; } + public string 包装代码 { get; set; } + public string 发货人编号 { get; set; } + public string 运输方式 { get; set; } + public bool? 是否自有箱 { get; set; } + public string 运费协议号 { get; set; } + + public long DJYCHILDRENID { get; set; } + } + + [Table("t_op_state")] + public partial class t_op_state_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int OS { get; set; } + public string 编号 { get; set; } + public string 业务状态 { get; set; } + public bool? 是否完成 { get; set; } + public DateTime? 完成时间 { get; set; } + public string 完成人 { get; set; } + public string 备注 { get; set; } + public string 录入人 { get; set; } + public DateTime? 录入日期 { get; set; } + public int? 顺序 { get; set; } + } + + [Table("t_op_ctn")] + public partial class t_op_ctn_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int ctn_id { get; set; } + public string 编号 { get; set; } + public string 代码 { get; set; } + public string 尺寸 { get; set; } + public string 箱型 { get; set; } + public int? 数量 { get; set; } + public int? TEU { get; set; } + public string 表现形式 { get; set; } + public string 箱号 { get; set; } + public string 封号 { get; set; } + public int? 件数 { get; set; } + public string 包装 { get; set; } + public decimal? 重量 { get; set; } + public decimal? 尺码 { get; set; } + public string 品名 { get; set; } + public string 货物描述 { get; set; } + public string 唛头 { get; set; } + //public string 备注 { get; set; } + public decimal? 净重 { get; set; } + public string 称重方式 { get; set; } + public decimal? 称重重量 { get; set; } + public string 签名 { get; set; } + public string VGM联系人 { get; set; } + public string VGM联系联系方式 { get; set; } + public string VGM签名 { get; set; } + public DateTime? VGM称重日期 { get; set; } + public string 称重地点 { get; set; } + public DateTime? 提箱时间 { get; set; } + public DateTime? 返场时间 { get; set; } + public DateTime? 放箱时间 { get; set; } + public DateTime? 下货纸时间 { get; set; } + public DateTime? 入港时间 { get; set; } + public DateTime? 码放时间 { get; set; } + public DateTime? 装船时间 { get; set; } + public decimal? 皮重 { get; set; } + public int? 堆存天数 { get; set; } + + public long? DJYCTNID { get; set; } + } + + [Table("t_op_ams")] + public partial class t_op_ams_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int id { get; set; } + public string 编号 { get; set; } + public string AMS发货人 { get; set; } + public string AMS收货人 { get; set; } + public string AMS通知人 { get; set; } + public string AMS代码 { get; set; } + public string 真实签约人代码 { get; set; } + public string 收货人国家代码 { get; set; } + public string 通知人国家代码 { get; set; } + public string HBL发送方式 { get; set; } + public string 发货人代码 { get; set; } + public string 收货人代码 { get; set; } + public string 销售代码 { get; set; } + public string 加拿大HBL { get; set; } + public string 货物混装描述 { get; set; } + public string 美国AMS标志 { get; set; } + public string 加拿大AMS标志 { get; set; } + public string 海洋污染物 { get; set; } + public string 危险品等级 { get; set; } + public string 危险品联系人 { get; set; } + public string 危险品联系方式 { get; set; } + public string 欧盟HSCODE { get; set; } + public string 南美东NCM { get; set; } + public string 巴西木质包装说明 { get; set; } + public string 超限箱 { get; set; } + public string 高超限 { get; set; } + public string 高度单位 { get; set; } + public decimal? 超限高度 { get; set; } + public string 长超限 { get; set; } + public string 长度单位 { get; set; } + public decimal? 超限长度前 { get; set; } + public decimal? 超限长度后 { get; set; } + public string 宽超限 { get; set; } + public string 宽度单位 { get; set; } + public decimal? 超限宽度左 { get; set; } + public decimal? 超限宽度右 { get; set; } + public string 代箱信息 { get; set; } + public string 超重箱标志 { get; set; } + public string NVONO { get; set; } + public string 特殊装载代码 { get; set; } + public string 超限箱标志 { get; set; } + public string 发货人国家代码 { get; set; } + public string 发货人联系电话 { get; set; } + public string 通知人代码 { get; set; } + public string 通知人联系电话 { get; set; } + public string 收货人联系电话 { get; set; } + public string 发货人企业代码 { get; set; } + public string 收货人企业代码 { get; set; } + public string 通知人企业代码 { get; set; } + public string 发货人电传 { get; set; } + public string 发货人邮箱 { get; set; } + public string 收货人电传 { get; set; } + public string 收货人邮箱 { get; set; } + public string 通知人电传 { get; set; } + public string 通知人邮箱 { get; set; } + public string ESL航线代码 { get; set; } + public DateTime? 实际开船日期 { get; set; } + + public string SI备注 { get; set; } + } + + + [Table("t_code_ctn")] + public partial class t_code_ctn_md + { + [Key] + + public string 代码 { get; set; } + public string 箱型 { get; set; } + public string 尺寸 { get; set; } + public string 表现形式 { get; set; } + public string EDI代码 { get; set; } + public string 海关EDI代码 { get; set; } + public string PIL代码 { get; set; } + public string 外运EDI代码 { get; set; } + public string EDI代码ONE { get; set; } + public string PILMELL代码 { get; set; } + public string TSL代码 { get; set; } + } + + [Table("t_code_ctn_de")] + public partial class t_code_ctn_de_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + + public int id { get; set; } + public string 箱型1 { get; set; } + public string 箱型2 { get; set; } + public string 箱型3 { get; set; } + public string 箱型4 { get; set; } + public string 箱型5 { get; set; } + public string 箱型6 { get; set; } + public string 箱型7 { get; set; } + public string 箱型8 { get; set; } + public string 箱型9 { get; set; } + public string 箱型10 { get; set; } + + } + + + + [Table("t_sys_code_emp")] + public partial class t_sys_code_emp_md + { + [Key, Column(Order = 0)] + public string 权限代码 { get; set; } + [Key, Column(Order = 1)] + public string 人员 { get; set; } + public string 一级模块 { get; set; } + public string 二级模块 { get; set; } + public string 权限名称 { get; set; } + public bool? 是否可操作 { get; set; } + public string 授权人 { get; set; } + public DateTime? 授权日期 { get; set; } + } + + [Table("t_code_goods")] + public partial class t_code_goods_md + { + public string 代码 { get; set; } + //[Key, Column(Order = 0)] + [Key] + public string 货物名称 { get; set; } + //[Key, Column(Order = 1)] + public string 商品编码 { get; set; } + + public string 货物描述 { get; set; } + } + + [Table("t_ch_fee")] + + public partial class t_ch_fee_md { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public string CH_ID { get; set; } + public string 类型 { get; set; } + public string 费用状态 { get; set; } + public string 费用原因 { get; set; } + public string 编号 { get; set; } + public string 费用名称 { get; set; } + public string 结算单位 { get; set; } + public string 客户名称 { get; set; } + public string 标准 { get; set; } + public decimal? 单价 { get; set; } + public decimal? 数量 { get; set; } + public decimal? 金额 { get; set; } + public string 币别 { get; set; } + public decimal? 汇率 { get; set; } + public string 备注 { get; set; } + public decimal? 结算金额 { get; set; } + public decimal? 开票金额 { get; set; } + public decimal? 申请金额 { get; set; } + public DateTime? 提交日期 { get; set; } + public string 审核人 { get; set; } + public DateTime? 审核日期 { get; set; } + public string 录入人 { get; set; } + public DateTime? 录入日期 { get; set; } + public string 对帐编号 { get; set; } + public bool? 是否对帐 { get; set; } + public int? 旧id { get; set; } + public string 旧状态 { get; set; } + public int? 顺序 { get; set; } + public decimal? 冲抵金额 { get; set; } + public bool? 机密 { get; set; } + public bool? 是否复核 { get; set; } + public bool? 系统费用 { get; set; } + public int? 运价编号 { get; set; } + public string 所属部门 { get; set; } + public DateTime? 应结日期 { get; set; } + public bool? 是否打印 { get; set; } + public bool? 不开发票 { get; set; } + public decimal? 税率 { get; set; } + public decimal? 税额 { get; set; } + public decimal? 不含税金额 { get; set; } + public string 方案编号 { get; set; } + //public string 方案名称 { get; set; } + public string 方案费用名称 { get; set; } + public string 拆分费用名称 { get; set; } + public decimal? 拆分金额 { get; set; } + public string 拆分币别 { get; set; } + public decimal? 拆分汇率 { get; set; } + } + + + + /// + /// 业务函电 + /// + [Table("t_op_letter")] + + public partial class t_op_letter_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int LE_ID { get; set; } = 0; + public string 编号 { get; set; } + public string 函电名称 { get; set; } + public string HEAD_TO { get; set; } + public string HEAD_ATTN { get; set; } + public string 签发人 { get; set; } + public DateTime? 签发日期 { get; set; } + public int? LF { get; set; } + + public long? DJYBOOKINGID { get; set; } + + public long? DJYLETTERID { get; set; } + } + + public class OpLetterBase { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.None)] + public int LE_ID { get; set; } = 0; + + public long? DJYLETTERID { get; set; } + public long? DJYBOOKINGID { get; set; } + + public void getCopy(OpLetterBase newrec, Type lettertype) + { + + PropertyInfo[] properties = lettertype.GetProperties(); + + // 遍历属性打印到控制台。 + foreach (PropertyInfo prop in properties) + { + if (prop.Name == "LE_ID" || prop.Name == "DJYID" || prop.Name == "DJYBOOKINGID") + continue; + //Console.WriteLine(prop.Name); + prop.SetValue(this, prop.GetValue(newrec), null); + } + } + } + + /// + /// 业务函电 派车 + /// + [Table("t_op_letter_pc")] + + public partial class t_op_letter_pc_md: OpLetterBase + { + public string 承运车队 { get; set; } + public string 箱型箱量 { get; set; } + public string 背箱场站 { get; set; } + public string 场站联系人 { get; set; } + public string 场站电话 { get; set; } + public string 要求到厂时间 { get; set; } + public string 厂家地址 { get; set; } + public string 厂家联系人 { get; set; } + public string 厂家联系电话 { get; set; } + public string 返箱地址 { get; set; } + public string 返箱联系人 { get; set; } + public string 返箱联系电话 { get; set; } + public string 备注 { get; set; } + public decimal? 陆运费 { get; set; } + public string 结算方式 { get; set; } + + } + + /// + /// 业务函电派车的集装箱信息表 + /// + [Table("t_op_letter_pc_ctn")] + + public partial class t_op_letter_pc_ctn_md + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int PCCTN { get; set; } + /// + /// 关联业务函电ID + /// + public int LE_ID { get; set; } + public string 表现形式 { get; set; } + public string 箱号 { get; set; } + public string 封号 { get; set; } + public int 数量 { get; set; } + public int? 件数 { get; set; } + public string 包装 { get; set; } + public decimal? 重量 { get; set; } + public decimal? 尺码 { get; set; } + public string 车牌号 { get; set; } + public string 司机 { get; set; } + public string 司机电话 { get; set; } + } + + + /// + /// + /// + [Table("t_op_letter_rh")] + + public partial class t_op_letter_rh_md : OpLetterBase + { + + public string 入货场站 { get; set; } + public string 入货截至时间 { get; set; } + public string 场站联系人 { get; set; } + public string 场站联系电话 { get; set; } + public string 备注 { get; set; } + + + public t_op_letter_rh_md() { } + + //public void getCopy(t_op_letter_rh_md updrec) { + // 入货场站 = updrec.入货场站; + // 入货截至时间 = updrec.入货截至时间; + // 场站联系人 = updrec.场站联系人; + // 场站联系电话 = updrec.场站联系电话; + // 场站电话 = updrec.场站电话; + // 备注 = updrec.备注; + // DJYID = updrec.DJYID; + //} + } + + +} \ No newline at end of file diff --git a/DSWeb.Common/DB/DS6DataContext.cs b/DSWeb.Common/DB/DS6DataContext.cs new file mode 100644 index 00000000..0a3b0839 --- /dev/null +++ b/DSWeb.Common/DB/DS6DataContext.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Data.Entity; +using System.Linq; +using System.Web; + +namespace DSWeb.Common.DB +{ + public class DS6DataContext : DbContext + { + public DS6DataContext() : base("DS6DB") + { + + } + + public DS6DataContext(string conn) : base(conn) + { + + } + + public DbSet t_crm_client { get; set; } + public DbSet t_sys_employee { get; set; } + public DbSet t_op_seae { get; set; } + public DbSet t_op_seae_assistant { get; set; } + public DbSet t_op_state { get; set; } + public DbSet t_op_ctn { get; set; } + public DbSet t_op_ams { get; set; } + + public DbSet t_code_ctn { get; set; } + public DbSet t_code_ctn_de { get; set; } + + public DbSet t_sys_code_emp { get; set; } + public DbSet t_code_goods { get; set; } + public DbSet t_ch_fee { get; set; } + + public DbSet t_op_letter { get; set; } + + public DbSet t_op_letter_rh { get; set; } + public DbSet t_op_letter_pc { get; set; } + public DbSet t_op_letter_pc_ctn { get; set; } + + } + + +} \ No newline at end of file diff --git a/DSWeb.Common/DSWeb.Common.csproj b/DSWeb.Common/DSWeb.Common.csproj index 4c909e55..22c8a120 100644 --- a/DSWeb.Common/DSWeb.Common.csproj +++ b/DSWeb.Common/DSWeb.Common.csproj @@ -64,6 +64,8 @@ + + diff --git a/DSWeb/Areas/CommMng/Controllers/BasicDataRefController.cs b/DSWeb/Areas/CommMng/Controllers/BasicDataRefController.cs index 0fa20dff..49920eef 100644 --- a/DSWeb/Areas/CommMng/Controllers/BasicDataRefController.cs +++ b/DSWeb/Areas/CommMng/Controllers/BasicDataRefController.cs @@ -2387,6 +2387,13 @@ namespace DSWeb.Areas.CommMng.Controllers /// public JsonResult SendOpseaeEmailToDjy(string BSNO, string str, string FileGidList = "")// { + var canlogin = BasicDataRefDAL.CheckLogin(Session); + if (!canlogin.Success) + { + return Json(canlogin.Data); + } + + var USERID = Session["USERID"].ToString(); //string str = "\"{\\\"VGM\\\":true}\""; @@ -2404,7 +2411,7 @@ namespace DSWeb.Areas.CommMng.Controllers //20240312 用formdata方式发送post请求 - result = hp.SendFormdataPost(); + result = hp.SendFormdataPost(USERID); if (result.Success) { result = hp.SendEmail_Opseae(USERID, BSNO, FileGidList); diff --git a/DSWeb/Areas/CommMng/DAL/BasicDataRefDAL.cs b/DSWeb/Areas/CommMng/DAL/BasicDataRefDAL.cs index 3bae5892..16cadc90 100644 --- a/DSWeb/Areas/CommMng/DAL/BasicDataRefDAL.cs +++ b/DSWeb/Areas/CommMng/DAL/BasicDataRefDAL.cs @@ -67,6 +67,8 @@ using DSWeb.MvcShipping.Models.FtpSet; using com.sun.org.glassfish.gmbal; using DSWeb.MvcShipping.DAL.MsOpSeaeEdiPortDAL; using DSWeb.Areas.Account.Models.Chfee_Invoice_HangXin; +using ICSharpCode.SharpZipLib.BZip2; +using System.Configuration; namespace DSWeb.Areas.CommMng.DAL { @@ -6700,7 +6702,20 @@ namespace DSWeb.Areas.CommMng.DAL #endregion + #region 判断appsetting当中该字段值为什么 + public static string getConfigAppSetting(string FieldName) { + var FieldValue = ConfigurationManager.AppSettings[FieldName]; + if (FieldValue != null && FieldValue.ToString() != "") + { + return FieldValue; + } + else { + return ""; + } + } + + #endregion public static JsonResponse IsLogin(HttpSessionStateBase Session) { @@ -6964,6 +6979,50 @@ namespace DSWeb.Areas.CommMng.DAL } + + /// + /// 压缩 + /// + /// + /// + public static string Compress(string input) + { + string result = string.Empty; + byte[] buffer = Encoding.UTF8.GetBytes(input); + using (MemoryStream outputStream = new MemoryStream()) + { + using (BZip2OutputStream zipStream = new BZip2OutputStream(outputStream)) + { + zipStream.Write(buffer, 0, buffer.Length); + zipStream.Close(); + } + return Convert.ToBase64String(outputStream.ToArray()); + } + } + /// + /// 解压缩 + /// + /// + /// + public static string Decompress(string input) + { + string result = string.Empty; + byte[] buffer = Convert.FromBase64String(input); + using (Stream inputStream = new MemoryStream(buffer)) + { + BZip2InputStream zipStream = new BZip2InputStream(inputStream); + + using (StreamReader reader = new StreamReader(zipStream, Encoding.UTF8)) + { + //输出 + result = reader.ReadToEnd(); + } + } + + return result; + } + + /// /// 海运现结买单的结算日期 /// @@ -7364,6 +7423,9 @@ namespace DSWeb.Areas.CommMng.DAL { result.第三方账号 = result.ParamObject["THIRDACCOUNT"].ToString(); } + else { + result.第三方账号 = ""; + } var 大简云服务项目List = BasicDataRefDAL.GetTSysEnumValueListByTypeid("81010").OrderBy(o => o.DispIndex).ToList(); result.服务项目 = ""; @@ -7403,7 +7465,7 @@ namespace DSWeb.Areas.CommMng.DAL private List DocList { get; set; } - private string 第三方账号 { get; set; } + private string 第三方账号 { get; set; } = ""; private string 服务项目 { get; set; } private string 订舱要求 { get; set; } @@ -7442,7 +7504,7 @@ namespace DSWeb.Areas.CommMng.DAL { "KGS", OpseaeHead.KGS }, { "CBM", OpseaeHead.CBM }, { "TOTALNO", OpseaeHead.TOTALNO }, - //{ "CARRIERID", OpseaeHead.CARRIERID }, + { "CARRIERID", OpseaeHead.CARRIER }, { "CARRIER", OpseaeHead.CARRIER }, { "CARGOID", OpseaeHead.CARGOID }, { "DCLASS", OpseaeHead.DCLASS }, @@ -7666,10 +7728,7 @@ namespace DSWeb.Areas.CommMng.DAL var result = new DBResult(true, ""); try { - var cansend = CanSend(USERID); - if (!cansend.Success) { - return cansend; - } + SetHead_Opseae(); @@ -7741,17 +7800,32 @@ namespace DSWeb.Areas.CommMng.DAL return result; } - public DBResult SendFormdataPost() { + public DBResult SendFormdataPost(string USERID) { var result = new DBResult(); var cdc = new Common.DB.CommonDataContext(); - Dictionary headers = BasicDataRefDAL.GetLogicInfo(OpseaeHead.CORPID, "大简云接口密钥_上传客户订舱需求"); + var cansend = CanSend(USERID); + if (!cansend.Success) + { + return cansend; + } + + var userkeyinfo = MsSysThirdPartyAccountDAL.GetData($"USERID='{USERID}' and THIRDPARTY='大简云用户userkey' "); - if (headers == null || headers.Count == 0) { + + Dictionary headers = new Dictionary(); + + if (userkeyinfo == null || string.IsNullOrWhiteSpace(userkeyinfo.ACCOUNT)) + { + result.SetErrorInfo("需要在第三方账号设置中设置:该账户的, 大简云用户userkey 的 账号和密钥 "); return result; } + else { + headers.Add("USER_KEY", userkeyinfo.ACCOUNT); + headers.Add("USER_SECRET", userkeyinfo.ACCOUNTPSW); + } var url = cdc.sys_param_set.FirstOrDefault(x => x.PARAMNAME == "DJYCANGDANURL2").PARAMVALUE; //var url = "http://60.209.125.238:30813/BookingCustomerOrder/ReceiveCustomerOrder"; @@ -7799,7 +7873,7 @@ namespace DSWeb.Areas.CommMng.DAL } var rtn= PostMultipartFormData(url, headers, values, files); - + BasicDataRefDAL.SaveLog(rtn,"","大简云订舱需求发送","返回值"); var _r = Newtonsoft.Json.JsonConvert.DeserializeObject(rtn); result = _r.getDBResult(); @@ -7821,7 +7895,7 @@ namespace DSWeb.Areas.CommMng.DAL result.SetErrorInfo($"船公司{carrier}没有配置第三方账号"); } else { - //第三方账号 = thirdaccount.ACCOUNT; + 第三方账号 = thirdaccount.ACCOUNT; result.OK(); } diff --git a/DSWeb/Areas/CommMng/DAL/PubSysDAL.cs b/DSWeb/Areas/CommMng/DAL/PubSysDAL.cs index a6de9844..f61f5d86 100644 --- a/DSWeb/Areas/CommMng/DAL/PubSysDAL.cs +++ b/DSWeb/Areas/CommMng/DAL/PubSysDAL.cs @@ -3,16 +3,25 @@ using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.Common; +using System.Data.Entity.Migrations; using System.Diagnostics; using System.Linq; using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; using System.Web; using DSWeb.Areas.CommMng.Models; +using DSWeb.Areas.MvcShipping.Models.Message.VGM; +using DSWeb.Common.DB; +using DSWeb.Dispatch.DAL; using DSWeb.EntityDA; +using DSWeb.MvcShipping.Models.MsOpSeae; using DSWeb.TruckMng.Comm.Cookie; using HcUtility.Comm; using Microsoft.Practices.EnterpriseLibrary.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace DSWeb.Areas.CommMng.DAL { @@ -244,5 +253,2812 @@ namespace DSWeb.Areas.CommMng.DAL #endregion } + public class MqWorkDAL + { + private static List DoingIDList { get; set; } = new List(); + + private static bool InWorking(long DJYID) + { + if (DoingIDList.Exists(x => x == DJYID)) + { + return true; + } + else + { + DoingIDList.Add(DJYID); + return false; + } + } + private static void WorkingDone(long DJYID) + { + if (DoingIDList.Exists(x => x == DJYID)) + { + DoingIDList.RemoveAll(s => s == DJYID); + } + } + public static void DingCangToDS7(string strBody) + { + try + { + + var jarr = JArray.Parse(strBody); + + var itemstr = ""; + var cdc = new CommonDataContext(); + + var dolist = new List(); + + foreach (var item in jarr) + { + var obj = item as JObject; + + itemstr = item.ToString(); + + //var head = JsonConvert.DeserializeObject(itemstr); + + //ThreadSaveDS6_Single SaveThread = new ThreadSaveDS6_Single(); + //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + //Thread thread1 = new Thread(new ParameterizedThreadStart(SaveThread.FuncSend)); + + //thread1.Start(itemstr); + + + Task.Run(() => { Do_DingCangToDS7(itemstr); }); + //Do_DingCangToDS6(itemstr); + } + + + + //注释部分 为每消息队列文本包 起一个线程 + //ThreadSaveDS6_List SaveThread = new ThreadSaveDS6_List(); + ////有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + //Thread thread1 = new Thread(new ParameterizedThreadStart(SaveThread.FuncSend)); + + //thread1.Start(dolist); + } + catch (Exception e) + { + //var errorobjstr = JsonConvert.SerializeObject(e); + //logger.Error($"导入出错:{e}//{errorobjstr}"); + } + + } + public static void Do_DingCangToDS7(string itemstr, int count = 0) + { + //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); + + + + if (count > 3) + { + //loggerHelper.Save($"重试完结"); + return; + } + + var head = JsonConvert.DeserializeObject(itemstr); + + var cdc = new CommonDataContext(); + try + { + if (InWorking(head.Id)) + { + Task.Run(() => { Do_DingCangToDS7(itemstr); }); + return; + } + + var newhead = head.GetOpseae(); + + var OPUser = new VW_user_md(); + + var OPUserList = cdc.VW_user.Where(x => x.SHOWNAME == head.op).ToList(); + + if (OPUserList != null && OPUserList.Count > 0) + { + OPUser = OPUserList[0]; + } + + var currentBill = DSWeb.MvcShipping.DAL.MsOpSeaeDAL.MsOpSeaeDAL.GetData($" B.DJYID={head.Id}", OPUser.USERID); + + if (currentBill != null && currentBill.DJYID != null) + { + //更新业务 + var updrec = currentBill; + + if (currentBill.BSSTATUS == true) + { + //业务锁定 不做任何操作 + return; + } + + var headid = updrec.BSNO; + + newhead.BSNO = updrec.BSNO; + newhead.MASTERNO = updrec.MASTERNO; + + //newhead.INPUTBY = updrec.INPUTBY; + //newhead.INPUTBY = updrec.INPUTBY; + } + else + { + //新增业务 + var ctnlist = head.GetCtnList("*"); + + newhead.BSNO = "topseae" + Guid.NewGuid().ToString(); + + var _r = DSWeb.MvcShipping.DAL.MsOpSeaeDAL.MsOpSeaeDAL.DoSave( + "add", + newhead, + ctnlist, + OPUser.USERID, + OPUser.SHOWNAME, + OPUser.COMPANYID, + OPUser.companyname); + } + } + catch (Exception e) + { + BasicDataRefDAL.SaveLog(e.Message, "", "接收大简云订舱", "错误"); + count++; + Do_DingCangToDS7(itemstr, count); + } + finally + { + WorkingDone(head.Id); + } + } + + + + private static List DoingBSNOList { get; set; } = new List(); + + private static bool InWorking_CustOrderStatus(string BSNO) + { + if (DoingBSNOList.Exists(x => x == BSNO)) + { + return true; + } + else + { + DoingBSNOList.Add(BSNO); + return false; + } + } + private static void WorkingDone_CustOrderStatus(string BSNO) + { + if (DoingBSNOList.Exists(x => x == BSNO)) + { + DoingBSNOList.RemoveAll(s => s == BSNO); + } + } + public static void CustOrderStatusToDS7(string strBody) + { + try + { + + var jarr = JArray.Parse(strBody); + + var itemstr = ""; + var cdc = new CommonDataContext(); + + var dolist = new List(); + + foreach (var item in jarr) + { + var obj = item as JObject; + + itemstr = item.ToString(); + + //var head = JsonConvert.DeserializeObject(itemstr); + + //ThreadSaveDS6_Single SaveThread = new ThreadSaveDS6_Single(); + //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + //Thread thread1 = new Thread(new ParameterizedThreadStart(SaveThread.FuncSend)); + + //thread1.Start(itemstr); + + + Task.Run(() => { Do_CustOrderStatusToDS7(itemstr); }); + //Do_DingCangToDS6(itemstr); + } + + } + catch (Exception e) + { + var errorobjstr = JsonConvert.SerializeObject(e); + BasicDataRefDAL.SaveLog($"导入出错:{e}//{errorobjstr}","","大简云订舱审批","错误"); + } + + } + public static void Do_CustOrderStatusToDS7(string itemstr, int count = 0) + { + //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); + + + + //if (count > 3) + //{ + // //loggerHelper.Save($"重试完结"); + // return; + //} + + var headinfo = JsonConvert.DeserializeObject(itemstr); + + if (InWorking_CustOrderStatus(headinfo.Data.BSNO)) + { + Task.Run(() => { Do_DingCangToDS7(itemstr); }); + return; + } + + var cdc = new CommonDataContext(); + try + { + if (headinfo.is通过()) + { + //var head = DSWeb.MvcShipping.DAL.MsOpSeaeDAL.MsOpSeaeDAL.GetData($"BSNO='{headinfo.Data.BSNO}'"); + + Database db = DatabaseFactory.CreateDatabase(); + using (var conn = db.CreateConnection()) + { + conn.Open(); + var tran = conn.BeginTransaction(); + try + { + var cmdDeletectn = db.GetSqlStringCommand($" update op_Seae set djyid={headinfo.Data.BookingOrderId} where BSNO='{headinfo.Data.BSNO}' "); + db.ExecuteNonQuery(cmdDeletectn, tran); + + BasicDataRefDAL.SaveLogicInfo(headinfo.Data.BSNO, "大简云订舱审批", "审批通过", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); + } + catch (Exception e) + { + tran.Rollback(); + BasicDataRefDAL.SaveLog(itemstr + ":" + e.Message, "", "大简云订舱审批", "审批通过"); + //return result; + } + } + + + } + + if (headinfo.is驳回()) + { + Database db = DatabaseFactory.CreateDatabase(); + using (var conn = db.CreateConnection()) + { + conn.Open(); + //var tran = conn.BeginTransaction(); + try + { + //var cmdDeletectn = db.GetSqlStringCommand($" update op_Seae set djyid={headinfo.Data.BookingOrderId} where BSNO='{headinfo.Data.BSNO}' "); + //db.ExecuteNonQuery(cmdDeletectn, tran); + var dic = new Dictionary { + {"审批驳回", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, + {"驳回理由", headinfo.Data.COMMENT } + }; + + BasicDataRefDAL.SaveLogicInfo(headinfo.Data.BSNO, "大简云订舱审批", dic); + + } + catch (Exception e) + { + BasicDataRefDAL.SaveLog(itemstr + ":" + e.Message, "", "大简云订舱审批", "审批驳回"); + //tran.Rollback(); + + //return result; + } + } + } + } + catch (Exception e) + { + BasicDataRefDAL.SaveLog(e.Message, "", "接收大简云订舱", "错误"); + count++; + Do_DingCangToDS7(itemstr, count); + } + finally + { + WorkingDone_CustOrderStatus(headinfo.Data.BSNO); + } + } + + + #region 大简云订舱数据解析类 + public class DingCangHead + { + public long Id { get; set; } + public string bsno { get; set; } //"string", + public string bsstatus { get; set; } //"string", + public string bsstatusname { get; set; } //"string", + public DateTime? bsdate { get; set; } //"2023-03-30T03:12:51.033Z", + public string mblno { get; set; } //"string", + public string tmblno { get; set; } //"string", + public string hblno { get; set; } //"string", + public string bookingno { get; set; } //"string", + public string contractno { get; set; } //"string", + public string servicecontractno { get; set; } //"string", + public string shipperid { get; set; } //"string", + public string consigneeid { get; set; } //"string", + public string notifypartyid { get; set; } //"string", + public string shipper { get; set; } //"string", + public string consignee { get; set; } //"string", + public string notifyparty { get; set; } //"string", + public string notifypartY2 { get; set; } //"string", + public string foreignAgent { get; set; } //"string", + + public string yardid { get; set; } //"string", + public string yard { get; set; } //"string", + public string vesselid { get; set; } //"string", + public string vessel { get; set; } //"string", + public string voyno { get; set; } //"string", + public string voynoinner { get; set; } //"string", + public DateTime? etd { get; set; } //"2023-03-30T03:12:51.033Z", + + /// + /// 云港通ETD(爬取的ETD) 写入 + /// + public DateTime? YgtETD { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? atd { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closingdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closedocdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closevgmdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? eta { get; set; } //"2023-03-30T03:12:51.033Z", + public string placereceiptid { get; set; } //"string", + public string placereceipt { get; set; } //"string", + public string portloadid { get; set; } //"string", + public string portload { get; set; } //"string", + public string portdischargeid { get; set; } //"string", + public string portdischarge { get; set; } //"string", + public string placedeliveryid { get; set; } //"string", + public string placedelivery { get; set; } //"string", + public string destinationid { get; set; } //"string", + public string destination { get; set; } //"string", + public string nobill { get; set; } //"string", + public string copynobill { get; set; } //"string", + public string issuetype { get; set; } //"string", + public DateTime? issuedate { get; set; } //"2023-03-30T03:12:51.033Z", + public string issueplaceid { get; set; } //"string", + public string issueplace { get; set; } //"string", + public string blfrt { get; set; } //"string", + public string prepardat { get; set; } //"string", + public string payableat { get; set; } //"string", + public string service { get; set; } //"string", + public string marks { get; set; } //"string", + public string hscode { get; set; } //"string", + public string description { get; set; } //"string", + public int? pkgs { get; set; } = 0; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0; + public decimal? cbm { get; set; } = 0; + public string totalno { get; set; } //"string", + public string cntrtotal { get; set; } //"string", + public string carrierid { get; set; } //"string", + public string carrier { get; set; } //"string", + public string cargoid { get; set; } //"string", + public string dclass { get; set; } //"string", + public string dunno { get; set; } //"string", + public string dpage { get; set; } //"string", + public string dlabel { get; set; } //"string", + public string linkman { get; set; } //"string", + public string tempid { get; set; } //"string", + public string tempset { get; set; } //"string", + public string reeferf { get; set; } //"string", + public string humidity { get; set; } //"string", + public string tempmin { get; set; } //"string", + public string tempmax { get; set; } //"string", + public bool? iscontainersoc { get; set; } //true, + public string soremark { get; set; } //"订舱备注", + public string siremark { get; set; } //"截单备注", + public string yardremark { get; set; } //"string", + public string compid { get; set; } //"string", + public string compname { get; set; } //"string", + public string shippername { get; set; } //"string", + public string shipperaddR1 { get; set; } //"string", + public string shipperaddR2 { get; set; } //"string", + public string shipperaddR3 { get; set; } //"string", + public string shippercity { get; set; } //"string", + public string shipperprovince { get; set; } //"string", + public string shipperpostcode { get; set; } //"string", + public string shippercountry { get; set; } //"string", + public string shipperattn { get; set; } //"string", + public string shippertel { get; set; } //"string", + public string consigneename { get; set; } //"string", + public string consigneeaddR1 { get; set; } //"string", + public string consigneeaddR2 { get; set; } //"string", + public string consigneeaddR3 { get; set; } //"string", + public string consigneecity { get; set; } //"string", + public string consigneeprovince { get; set; } //"string", + public string consigneepostcode { get; set; } //"string", + public string consigneercountry { get; set; } //"string", + public string consigneeattn { get; set; } //"string", + public string consigneetel { get; set; } //"string", + public string notifypartyname { get; set; } //"string", + public string notifypartyaddR1 { get; set; } //"string", + public string notifypartyaddR2 { get; set; } //"string", + public string notifypartyaddR3 { get; set; } //"string", + public string notifypartycity { get; set; } //"string", + public string notifypartyprovince { get; set; } //"string", + public string notifypartypostcode { get; set; } //"string", + public string notifypartycountry { get; set; } //"string", + public string notifypartyattn { get; set; } //"string", + public string notifypartytel { get; set; } //"string", + public string pono { get; set; } //"string", + public string opid { get; set; } //"string", + public string docid { get; set; } //"string", + public string op { get; set; } //"string", + public string doc { get; set; } //"string", + public string saleid { get; set; } //"string", + public string sale { get; set; } //"string", + public string custserviceid { get; set; } //"string", + public string custservice { get; set; } //"string", + public string customername { get; set; } //"string", + public string thirdPay { get; set; } //"第三方 第三方付费", + public string forwarder { get; set; } //"string", + public string shipagency { get; set; } //"string", + public string customser { get; set; } //"string", + public string trucker { get; set; } //"string", + public string agentid { get; set; } //"string", + public long? customerid { get; set; } //= 0; + public string forwarderid { get; set; } //"string", + public string shipagencyid { get; set; } //"string", + public string customserid { get; set; } //"string", + public string truckerid { get; set; } //"string", + public string agentname { get; set; } //"string", + public string weituo { get; set; } //"string", + public string consigneedooraddr { get; set; } //"string", + public string shipperdooraddr { get; set; } //"string", + public string scaccode { get; set; } //"string", + public string itncode { get; set; } //"string", + public string prepardatid { get; set; } //"string", + public string payableatid { get; set; } //"string", + public string custno { get; set; } //"string", + public string transportid { get; set; } //"string", + public string transport { get; set; } //"string", + public string thirdpayaddr { get; set; } //"string", + public string yardcontract { get; set; } //"string", + public string yardcontracttel { get; set; } //"string", + public string yardcontractemail { get; set; } //"string", + public bool? feeself { get; set; } //true, + + + public string lanecode { get; set; } //"string", + public string lanename { get; set; } //"string", + public string freightpayer { get; set; } //"string", + public string goodscode { get; set; } //"string", + public string goodsname { get; set; } //"string", + public string pkgstotal { get; set; } //"string", + public string kgstotal { get; set; } //"string", + public string cbmtotal { get; set; } //"string", + public string routeid { get; set; } //"string", + public string route { get; set; } //"string", + public string warehouse { get; set; } //"string", + public string warehouseID { get; set; } //"string", + public string epCode { get; set; } //"string", + + /// + /// 用户自定义航线 + /// + public string lineName { get; set; } //"string", + public string dzRemark { get; set; } //"string", + public string czRemark { get; set; } //"string", + public string createdUserName { get; set; } //"string", + + public string ZhanCangFlag { get; set; } = ""; //"string", + + public string SourceName { get; set; } = ""; //"string", + + //public string CtnDayNum { get; set; } = "";//箱使堆存 废弃 + + public string ShenQingXiangShi { get; set; } = "";//箱使堆存 + + public string VERSION { get; set; } = "";//版本号 内容为一个gid,用来记录数据是否为最新 + + public string LineManage { get; set; } = "";//航线管理 + public string ShippingMethod { get; set; } = "";//装运方式 整箱/拼箱 + + public List ctnInputs { get; set; } + public DingCangbookingEDIExt bookingEDIExt { get; set; } + /// + /// 原来使用DingCangTDXX + /// + public List childrens { get; set; } + + public List goodsStatus { get; set; } + + class 箱型箱量item + { + + public CODE_CTN_md 箱型 { get; set; } + public int 箱量 { get; set; } = 0; + + public 箱型箱量item(CODE_CTN_md _箱型, int _箱量) + { + 箱型 = _箱型; + 箱量 = _箱量; + } + } + + class 箱型箱量 + { + public List<箱型箱量item> 箱型箱量信息 { get; set; } + + + public 箱型箱量() + { + var cdc = new CommonDataContext(); + + 箱型箱量信息 = new List<箱型箱量item>(); + + } + + public void Add(箱型箱量item newitem) + { + if (箱型箱量信息.Exists(x => x.箱型 == newitem.箱型)) + { + 箱型箱量信息.First(x => x.箱型 == newitem.箱型).箱量 += newitem.箱量; + } + else + { + 箱型箱量信息.Add(newitem); + } + } + + public string get集装箱() + { + var result = ""; + foreach (var item in 箱型箱量信息) + { + if (result != "") result += " "; + result += item.箱型.CTN + "*" + item.箱量.ToString(); + } + return result; + } + + public string get计费标准() + { + var result = ""; + foreach (var item in 箱型箱量信息) + { + if (result != "") result += "\r\n"; + result += item.箱型.CTN + "*" + item.箱量.ToString() + "-" + item.箱型.CTN; + } + return result; + } + + public string get箱数大写() + { + var result = "SAY: "; + foreach (var item in 箱型箱量信息) + { + if (result != "SAY: ") result += " AND "; + + + + result += NumberToEnglishString(item.箱量).ToUpper() + " (" + item.箱型.CTN + "*" + item.箱量.ToString() + ")"; + } + + result += " CONTAINER ONLY. "; + return result; + } + + public int getTeu() + { + var result = 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.CTNSIZE == "20") + { + result += 1 * item.箱量; + } + else + { + result += 2 * item.箱量; + } + } + return result; + } + } + + public int get周次(DateTime? etd) + { + try + { + DateTime dateTime = new DateTime(((DateTime)etd).Year, 1, 1); + TimeSpan ts1 = ((DateTime)etd).Subtract(dateTime).Duration(); + var days = ts1.Days; + var weeks = (int)(Math.Ceiling(days / 7.0)); + return weeks; + } + catch (Exception e) + { + return 0; + } + } + + //记录品名 + + public MsOpSeae GetOpseae() + { + //var weeks = get周次(etd); + + //20230410 根据箱信息重新计算 集装箱 和 箱数大写 + var cdc = new CommonDataContext(); + var 箱型箱量 = new 箱型箱量(); + + var tcodectn = cdc.CODE_CTN.Where(x => 1 == 1).ToList(); + + if (ctnInputs != null) + foreach (var ctn in ctnInputs) + { + var 箱型infoList = tcodectn.Where(x => (x.CTNSIZE + x.CTNTYPE) == ctn.ctnall + || (x.CTNSIZE + "'" + x.CTNTYPE) == ctn.ctnall + || x.CTN == ctn.ctnall).ToList(); + var 箱型info = new CODE_CTN_md(); + if (箱型infoList != null && 箱型infoList.Count > 0) + { + 箱型info = 箱型infoList[0]; + } + else + { + continue; + } + + 箱型箱量.Add(new 箱型箱量item(箱型info, ctn.ctnnum == null ? 1 : (int)ctn.ctnnum)); + } + + var 集装箱 = 箱型箱量.get集装箱(); + var 箱数大写 = 箱型箱量.get箱数大写(); + var 计费标准 = 箱型箱量.get计费标准(); + + //处理货名 + //HS编码 = hscode, + //货物名称 = bookingEDIExt.goodsName, + //货物描述 = description, + + var 货物名称 = ""; + + //var 当前货名 = d6.t_code_goods.Where(x => x.代码 == goodscode).ToList(); + //if (当前货名 == null || 当前货名.Count == 0) + //{ + // if(!string.IsNullOrWhiteSpace(goodscode)) { + // var newrec = new t_code_goods_md(); + // newrec.代码 = SetLength(goodscode, 10); + // newrec.货物名称 = SetLength(goodsname, 100); + // 货物名称 = newrec.货物名称; + // newrec.货物描述 = SetLength(description, 600); + // newrec.商品编码 = SetLength(hscode, 10); + // d6.t_code_goods.Add(newrec); + // d6.SaveChanges(); + // } + //} + //else + //{ + // 货物名称 = 当前货名[0].货物名称; + //} + + 货物名称 = dealGoodsinfo(goodscode, goodsname, description, hscode); + + var _etd = new DateTime(); + var _eta = new DateTime(); + + if (etd != null) _etd = new DateTime(((DateTime)etd).Year, ((DateTime)etd).Month, ((DateTime)etd).Day); + if (eta != null) _eta = new DateTime(((DateTime)etd).Year, ((DateTime)etd).Month, ((DateTime)etd).Day); + + var 操作 = op; + var 操作部门名称 = ""; + var 操作部门 = cdc.VW_user.FirstOrDefault(x => x.SHOWNAME == 操作); + if (操作部门 != null) 操作部门名称 = 操作部门.DEPTNAME; + + + + var 销售 = sale; + var 销售部门名称 = ""; + var 销售部门 = cdc.VW_user.FirstOrDefault(x => x.SHOWNAME == 销售); + if (销售部门 != null) 销售部门名称 = 销售部门.DEPTNAME; + + + //carrier + var 船公司 = carrier; + + var 船公司edi代码List = cdc.CodeCustEdi.Where(x => x.EDINAME == "大简云船公司" && x.EDICODE == carrier).ToList(); + + if (船公司edi代码List != null && 船公司edi代码List.Count > 0) + { + 船公司 = 船公司edi代码List[0].CUST; + } + + var carrier_clientList = cdc.info_client.Where(x => x.SHORTNAME == 船公司).ToList(); + if (carrier_clientList != null && carrier_clientList.Count > 0) + { + var carrier_client = carrier_clientList[0]; + 船公司 = carrier_client.SHORTNAME; + } + + //int? 申请箱使天数 = null; + DateTime now = DateTime.Now; + DateTime today2 = new DateTime(now.Year, now.Month, now.Day); + + var 装运方式 = "整箱"; + if (!string.IsNullOrWhiteSpace(ShippingMethod)) + { + //if (船公司.IndexOf("拼箱") >= 0) + //{ + // 装运方式 = "拼箱"; + //} + 装运方式 = ShippingMethod; + } + + var result = new MsOpSeae + { + BSNO = bsno, + BSSTATUS = false, + FEESTATUS = false, + + //会计期间 = SetDayZero(atd), + //装运方式 = 装运方式, + //周次 = weeks, + //录入日期 = bsdate, //bsdate new DateTime(2070, 1, 1) ? DateTime.Now: bsdate, + MBLNO = mblno, + //真提单号 = tmblno, + //主提单标准 = string.IsNullOrWhiteSpace( mblno)?, + HBLNO = hblno, + CUSTNO = custno, + CONTRACTNO = contractno, + SHIPPER = 设置换行(shipper), + CONSIGNEE = 设置换行(consignee), + NOTIFYPARTY = 设置换行(notifyparty), + YARD = yard, + VESSEL = vessel, + VOYNO = voynoinner, + ETD = SetDayMinute_Str(YgtETD), + //ETD = SetDayMinute_Str(YgtETD), + ETA = SetDayZero_Str(eta), + ATD = SetDayMinute_Str(atd), + CLOSINGDATE = SetDayZero_Str(closingdate), + + PORTLOADID = portloadid, + PORTLOAD = portload, + PORTDISCHARGEID = portdischargeid, + PORTDISCHARGE = portdischarge, + PLACEDELIVERYID = placedeliveryid, + PLACEDELIVERY = placedelivery, + DESTINATIONID = destinationid, + DESTINATION = destination, + NOBILL = nobill, + COPYNOBILL = copynobill, + ISSUETYPE = issuetype, + ISSUEDATE = issuedate == null ? "" : ((DateTime)issuedate).ToString("yyyy-MM-dd"), + ISSUEPLACE = issueplace, + BLFRT = blfrt, + PREPARDAT = prepardat, + PAYABLEAT = payableat, + SERVICE = service, + MARKS = 设置换行(marks), + CUSTSERVICE = service, + HSCODE = hscode, + GOODSNAME = 货物名称, + DESCRIPTION = 设置换行(description), + PKGS = pkgs.ToString(), + KINDPKGS = kindpkgs, + KGS = kgs.ToString(), + CBM = cbm.ToString(), + TOTALNO = totalno, + CNTRTOTAL = 集装箱,//cntrtotal,// + //TOTALNO = 箱数大写, + //计费标准 = 计费标准, + CARRIER = 船公司,//carrier, + CARGOID = cargoid, + DCLASS = dclass, + DUNNO = dunno, + TEMPSET = tempset, + REEFERF = reeferf, + TEMPMIN = tempmin, + TEMPMAX = tempmax, + ISCONTAINERSOC = iscontainersoc == null ? false : (bool)iscontainersoc, + //订舱备注 = 设置换行(soremark),//订舱备注 + //分单列表 = 设置换行(soremark), + //附加条款 = 设置换行(soremark), + //全称= compname, + //合同号 = pono, + ORDERNO = pono, + //合同号备注 = pono, + FRCUSTSERVICE = custservice, + OP = op, + + DOC = doc, + SALE = sale, + //航线操作 = route, + CUSTOMERNAME = customername, + //第三方付费 = thirdPay, + CUSTOMSER = customser, + TRUCKER = trucker, + FORWARDER = forwarder,//大简云“订舱代理”,ds6界面的“订舱代理”,ds6数据库的货代 + //备案号 = lanename, + LANE = lineName, + SHIPAGENCY = shipagency, + AGENT = agentname,//大简云“国外代理”,ds6界面的“代理”,ds6数据库的代理 + //其他备注 = 设置换行(dzRemark), + //是否占舱 = ZhanCangFlag == "是" ? "Y" : "N", + //占舱备注 = 设置换行(czRemark), + REMARK = 设置换行(dzRemark), + + INPUTBY = createdUserName, + EDIREMARK = (bookingEDIExt == null) ? "" : 设置换行(bookingEDIExt.orderRemark), + DJYID = Id, + //通知到港 = null, + //是否提货 = null, + //是否提交VGM = null, + //是否提交舱单 = null, + //是否装载放行 = null, + + SOURCECODE = SourceName, + + //箱使堆存 = 设置换行(ShenQingXiangShi), + + //总价 = (bookingEDIExt == null) ? "" : bookingEDIExt.kingTareweight == null ? "" : bookingEDIExt.kingTareweight.ToString().Replace(".0", ""), + + //箱TEU = 箱型箱量.getTeu(), + //箱型1 = 箱型箱量.get箱型1(), + //箱型2 = 箱型箱量.get箱型2(), + //箱型3 = 箱型箱量.get箱型3(), + //箱型4 = 箱型箱量.get箱型4(), + //箱型5 = 箱型箱量.get箱型5(), + //箱型6 = 箱型箱量.get箱型6(), + //箱型7 = 箱型箱量.get箱型7(), + //箱型8 = 箱型箱量.get箱型8(), + //箱型9 = 箱型箱量.get箱型9(), + //箱型10 = 箱型箱量.get箱型10(), + + //辅助字段一 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark1), + //辅助字段二 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark2), + //辅助字段三 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark3), + //辅助字段四 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark4), + + //操作部门 = 操作部门名称, + SALEDEPT = 销售部门名称, + + //DJYVERSION = VERSION, + //航线管理 = LineManage + }; + + //if (goodsStatus != null) + // foreach (var status in goodsStatus) + // { + // if (status.statusName == "通知到港") + // { + // if (status.finishTime != null) + // result.通知到港 = true; + // } + // if (status.statusName == "是否提货") + // { + // if (status.finishTime != null) + // result.是否提货 = true; + // } + // if (status.statusName == "提交VGM") + // { + // if (status.finishTime != null) + // result.是否提交VGM = true; + // } + // if (status.statusName == "提交舱单") + // { + // if (status.finishTime != null) + // result.是否提交舱单 = true; + // } + // if (status.statusName == "装载放行") + // { + // if (status.finishTime != null) + // result.是否装载放行 = true; + // } + // } + + #region 设定字符串长度 超长的截断 + + + + //var lengthDic = new Dictionary + //{ + // {"业务状态",80}, + // {"主提单号",20}, + // {"分提单号",30}, + // {"委托编号",20}, + // {"装运方式",8}, + // {"委托单位",20}, + // {"发货人",20}, + // {"收货人",20}, + // {"通知人",20}, + // {"发货人代码",1000}, + // {"收货人代码",1000}, + // {"通知人代码",1000}, + // {"代理",20}, + // {"代理内容",1000}, + // {"场站",20}, + // {"船名",60}, + // {"航次",20}, + // {"起运港",60}, + // {"装货港",60}, + // {"装港代码",10}, + // {"卸货港",100}, + // {"卸货代码",10}, + // {"二程港口",60}, + // {"二程船名",60}, + // {"二程航次",20}, + // {"目的地",30}, + // {"交货地点",100}, + // {"交货代码",10}, + // {"提单份数",10}, + // {"签单方式",50}, + // {"签单地点",30}, + // {"付费方式",60}, + // {"预付地点",100}, + // {"到付地点",100}, + // {"运输条款",10}, + // {"唛头",800}, + // {"箱号封号",3000}, + // {"件数包装",1000}, + // {"货物描述",1400}, + // {"货物名称",100}, + // {"货物重量",1000}, + // {"货物尺码",1000}, + // {"包装",60}, + // {"件数大写",100}, + // {"箱数大写",100}, + // {"集装箱",200}, + // {"录入人",12}, + // {"操作员",10}, + // {"揽货人",10}, + // {"客服员",10}, + // {"航线",30}, + // {"船公司",20}, + // {"货代公司",20}, + // {"备注",800}, + // {"报关行",20}, + // {"承运车队",20}, + // {"分单列表",2000}, + // {"计费标准",1000}, + // {"报关员",10}, + // {"报关单号",20}, + // {"核销单号",50}, + // {"手册号",20}, + // {"经营单位",60}, + // {"单位代码",20}, + // {"合同号",50}, + // {"合同号备注",50}, + // {"报关备注",600}, + // {"危险品分类",5}, + // {"危险品编号",20}, + // {"冷藏通风量",12}, + // {"温度单位",1}, + // {"设置温度",16}, + // {"最低温度",5}, + // {"最高温度",5}, + // {"货物标识",1}, + // {"发票号",20}, + // {"商品编码",400}, + // {"销售部门",30}, + // {"操作部门",30}, + // {"业务来源",8}, + // {"英文船期",12}, + // {"三程港口",60}, + // {"三程船名",60}, + // {"三程航次",20}, + // {"辅助字段一",600}, + // {"辅助字段二",600}, + // {"辅助字段三",600}, + // {"辅助字段四",600}, + // {"解锁人",10}, + // {"主提单标准",30}, + // {"分提单标准",30}, + // {"委托标准",30}, + // {"财务凭证",30}, + // {"附加条款",600}, + // {"备案号",20}, + // {"运抵国",60}, + // {"境内货源地",60}, + // {"批准文号",20}, + // {"成交方式",20}, + // {"单价",100}, + // {"总价",100}, + // {"商品名称",400}, + // {"数量单位",400}, + // {"报检单号",20}, + // {"实验内容",100}, + // {"报关操作",10}, + // {"报检操作",10}, + // {"币制",100}, + // {"单证信息",100}, + // {"核销标准",20}, + // {"报关标准",20}, + // {"报检标准",20}, + // {"目的地代码",10}, + // {"包装代码",10}, + // {"发货人编号",10}, + // {"运输方式",10}, + // {"运费协议号",20}, + // {"航线操作",10}, + // //{"分票编号",12}, + // //{"特殊要求",30}, + // {"HS编码",30}, + // {"船代",20}, + // {"单证员",10}, + // {"箱使堆存",30}, + // {"EDI备注",2000}, + // {"航线管理",20} + //}; + + //foreach (var item in lengthDic) + //{ + // try + // { + // var property = result.GetType().GetProperty(item.Key); + // if (property != null) + // { + // var _v = result.GetType().GetProperty(item.Key).GetValue(result); + // if (_v != null) + // { + // var newvalue = SetLength(_v.ToString(), item.Value); + // result.GetType().GetProperty(item.Key).SetValue(result, newvalue); + // } + // } + // //var value = result.GetType().GetProperty(item.Key).GetValue(result).ToString(); + // //var newvalue = SetLength(value, item.Value); + // //result.GetType().GetProperty(item.Key).SetValue(result, newvalue); + // } + // catch (Exception e) + // { + // continue; + // } + //} + + + + #endregion + + return result; + } + + public List GetCtnList(string BSNO) + { + var result = new List(); + + + if (ctnInputs != null) + { + + var cdc = new CommonDataContext(); + + + var CurrCtnList = new List(); + + if (BSNO != "*") + { + CurrCtnList = DSWeb.MvcShipping.DAL.MsOpSeaeDAL.MsOpSeaeDAL.GetBodyList($" BSNO='{BSNO}'"); + + var djyctnids = ctnInputs.Select(x => x.id).ToList(); + + var 需删除Ctn = CurrCtnList.Where(x => !djyctnids.Contains(x.DJYCTNID)).ToList(); + + if (需删除Ctn != null && 需删除Ctn.Count > 0) + { + var delidstr = string.Join(",", 需删除Ctn.Select(s => s.DJYCTNID)); + + Database db = DatabaseFactory.CreateDatabase(); + using (var conn = db.CreateConnection()) + { + conn.Open(); + var tran = conn.BeginTransaction(); + try + { + var cmdDeletectn = db.GetSqlStringCommand(" delete from op_ctn where DJYCTNID in(" + delidstr + ") "); + db.ExecuteNonQuery(cmdDeletectn, tran); + } + catch (Exception) + { + tran.Rollback(); + + //return result; + } + } + } + } + + foreach (var ctn in ctnInputs) + { + var 箱型infoList = cdc.CODE_CTN.Where(x => + (x.CTNSIZE + "'" + x.CTNTYPE) == ctn.ctnall + || (x.CTNSIZE + x.CTNTYPE) == ctn.ctnall + || (x.CTNSIZE + "'" + x.CTNTYPE.Replace("OT", "O/T")) == ctn.ctnall + || (x.CTNSIZE + x.CTNTYPE.Replace("OT", "O/T")) == ctn.ctnall + + ).ToList(); + var 箱型info = new CODE_CTN_md(); + if (箱型infoList != null && 箱型infoList.Count > 0) + { + 箱型info = 箱型infoList[0]; + } + else + { + continue; + } + + var ctnbsno = BSNO; + + if (BSNO != "*" && !CurrCtnList.Exists(x => x.DJYCTNID == ctn.id)) + { + ctnbsno = BSNO; + var updctn = CurrCtnList.FirstOrDefault(x => x.DJYCTNID == ctn.id); + updctn.CTNCODE = 箱型info.CTNID; + updctn.SIZE = 箱型info.CTNSIZE; + updctn.CTN = 箱型info.CTN; + updctn.BSNO = ctnbsno; + updctn.CTNALL = ctn.ctnall; + updctn.CTNNUM = ctn.ctnnum == null ? 0 : (int)ctn.ctnnum; + updctn.CNTRNO = ctn.cntrno; + updctn.SEALNO = ctn.sealno; + updctn.PKGS = ctn.pkgs == null ? 0 : (int)ctn.pkgs; + updctn.KINDPKGS = ctn.kindpkgs; + updctn.KGS = ctn.kgs == null ? 0 : (decimal)ctn.kgs; + updctn.CBM = ctn.cbm == null ? 0 : (decimal)ctn.cbm; + updctn.TAREWEIGHT = ctn.tareweight == null ? 0 : (decimal)ctn.tareweight; + updctn.TEU = 箱型info.TEU == null ? 0 : (int)箱型info.TEU; + updctn.WEIGHKGS = ctn.weighkgs == null ? 0 : (decimal)ctn.weighkgs; + //DJYCTNID = ctn.id; + + } + else + { + //如果DS7里面没有这个djyctnid,保存时新增,依据BSNO=*作为标记(ds7现有逻辑) + ctnbsno = "*"; + var newctn = new MsOpSeaeDetail + { + CTNCODE = 箱型info.CTNID, + SIZE = 箱型info.CTNSIZE, + CTN = 箱型info.CTN, + BSNO = ctnbsno, + CTNALL = ctn.ctnall, + CTNNUM = ctn.ctnnum == null ? 0 : (int)ctn.ctnnum, + CNTRNO = ctn.cntrno, + SEALNO = ctn.sealno, + PKGS = ctn.pkgs == null ? 0 : (int)ctn.pkgs, + KINDPKGS = ctn.kindpkgs, + KGS = ctn.kgs == null ? 0 : (decimal)ctn.kgs, + CBM = ctn.cbm == null ? 0 : (decimal)ctn.cbm, + TAREWEIGHT = ctn.tareweight == null ? 0 : (decimal)ctn.tareweight, + TEU = 箱型info.TEU == null ? 0 : (int)箱型info.TEU, + WEIGHKGS = ctn.weighkgs == null ? 0 : (decimal)ctn.weighkgs, + DJYCTNID = ctn.id + }; + result.Add(newctn); + } + + + } + } + + return result; + } + + public string dealGoodsinfo(string goodscode, string goodsname, string description, string hscode) + { + var result = ""; + + try + { + if (string.IsNullOrWhiteSpace(goodsname)) return ""; + var cdc = new CommonDataContext(); + var 当前货名 = cdc.code_goods.Where(x => x.GOODNAME == goodsname).ToList(); + if (当前货名 == null || 当前货名.Count == 0) + { + if (!string.IsNullOrWhiteSpace(goodsname)) + { + var newrec = new code_goods_md(); + newrec.GID = Guid.NewGuid().ToString(); + newrec.GOODCODE = SetLength(goodscode, 10); + newrec.GOODNAME = SetLength(goodsname, 60); + result = newrec.GOODNAME; + newrec.DESCRIP = SetLength(description, 600); + newrec.HSCODE = SetLength(hscode, 10); + cdc.code_goods.Add(newrec); + cdc.SaveChanges(); + } + } + else + { + result = 当前货名[0].GOODNAME; + } + } + catch (Exception e) + { + var str = JsonConvert.SerializeObject(e); + if (e.InnerException != null) + { + str += ";;;InnerException:" + JsonConvert.SerializeObject(e.InnerException); + } + //logger.Error(str); + BasicDataRefDAL.SaveLog(e, "", "接收大简云订舱", "错误"); + } + return result; + } + + public static void GetCtn(ref t_op_ctn_md curr, t_op_ctn_md ctn) + { + curr.代码 = ctn.代码; + curr.尺寸 = ctn.尺寸; + curr.箱型 = ctn.箱型; + //curr.编号 = head.编号, + curr.表现形式 = ctn.表现形式; + curr.数量 = ctn.数量; + curr.箱号 = ctn.箱号; + curr.封号 = ctn.封号; + curr.件数 = ctn.件数; + curr.包装 = ctn.包装; + curr.重量 = ctn.重量; + curr.尺码 = ctn.尺码; + curr.皮重 = ctn.皮重; + curr.TEU = ctn.TEU; + curr.称重重量 = ctn.称重重量; + curr.DJYCTNID = ctn.DJYCTNID; + } + public List GetAmsList(t_op_seae_md head) + { + var result = new List(); + + + //foreach (var item in bookingEDIExt) + //{ + var item = bookingEDIExt; + + if (bookingEDIExt != null) + { + var newrec = new t_op_ams_md + { + 编号 = head.编号, + 发货人代码 = SetLength(item.shipperEdiCode, 10), + 收货人代码 = SetLength(item.consigneeEdiCode, 10), + 销售代码 = SetLength(item.salerCode, 10), + 危险品联系人 = SetLength(item.ediAttn, 30), + 危险品联系方式 = SetLength(item.ediAttnTel, 50), + 欧盟HSCODE = SetLength(item.ckhi, 100), + 南美东NCM = 设置换行(SetLength(item.cncm, 600)), + 巴西木质包装说明 = 设置换行(SetLength(item.wncm, 300)), + 实际开船日期 = head.开船日期, + HBL发送方式 = SetLength(item.masterBolIndicator, 1), + ESL航线代码 = SetLength(lanename, 20), + SI备注 = 设置换行(SetLength(siremark, 1000)) + }; + + //20230530 如果船公司不是太平PIL 则将部分字段设为空白 + if (head.船公司 == "PIL") + { + newrec.HBL发送方式 = ""; + newrec.销售代码 = ""; + newrec.实际开船日期 = null; + newrec.南美东NCM = ""; + newrec.巴西木质包装说明 = ""; + newrec.欧盟HSCODE = ""; + } + + result.Add(newrec); + } + //} + + return result; + } + + //public List GetAssistantList(t_op_seae_md head) + //{ + // var result = new List(); + // var d6 = new DS6DataContext(); + // var 货物名称 = ""; + + // if (childrens != null) + // foreach (var item in childrens) + // { + + // var weeks = get周次(item.etd); + + // var 箱型箱量 = new 箱型箱量(); + + // var 箱号封号 = ""; + // var 件数包装 = item.pkgs.ToString() + item.kindpkgs; + // var 货物重量 = item.kgs.ToString() + "KGS"; + // var 货物尺码 = item.cbm.ToString() + "CBM"; + + // foreach (var ctn in item.ctnInputs) + // { + // var 箱型infoList = d6.t_code_ctn.Where(x => + // (x.尺寸 + "'" + x.箱型) == ctn.ctnall + // || (x.尺寸 + x.箱型) == ctn.ctnall + // || (x.尺寸 + "'" + x.箱型.Replace("OT", "O/T")) == ctn.ctnall + // || (x.尺寸 + x.箱型.Replace("OT", "O/T")) == ctn.ctnall + + // ).ToList(); + // var 箱型info = new t_code_ctn_md(); + // if (箱型infoList != null && 箱型infoList.Count > 0) + // { + // 箱型info = 箱型infoList[0]; + // } + // else + // { + // continue; + // } + + // 箱型箱量.Add(new 箱型箱量item(箱型info, ctn.ctnnum == null ? 1 : (int)ctn.ctnnum)); + + // if (!string.IsNullOrWhiteSpace(ctn.cntrno) || !string.IsNullOrWhiteSpace(ctn.sealno)) + // { + // if (箱号封号 != "") 箱号封号 += "\r\n"; + // 箱号封号 += (string.IsNullOrWhiteSpace(ctn.cntrno) ? "" : ctn.cntrno) + (string.IsNullOrWhiteSpace(ctn.sealno) ? "" : "/" + ctn.sealno); + // } + + // //if (ctn.pkgs != null && ctn.pkgs != 0 && !string.IsNullOrWhiteSpace(ctn.kindpkgs)) + // //{ + // // if (件数包装 != "") 件数包装 += "\r\n"; + // // 件数包装 += ctn.pkgs.ToString() + ctn.kindpkgs; + // //} + + // //if (ctn.kgs != null)// && ctn.重量 != 0 + // //{ + // // if (货物重量 != "") 货物重量 += "\r\n"; + // // 货物重量 += ctn.kgs.ToString() + "KGS"; + // //} + + // //if (ctn.cbm != null)//&& ctn.尺码 != 0 + // //{ + // // if (货物尺码 != "") 货物尺码 += "\r\n"; + // // 货物尺码 += ctn.cbm.ToString() + "CBM"; + // //} + // } + + // var 集装箱 = 箱型箱量.get集装箱(); + // var 箱数大写 = 箱型箱量.get箱数大写(); + + // //var 当前货名 = new t_code_goods_md(); + + // 货物名称 = dealGoodsinfo(item.goodscode, item.goodsname, item.description, item.hscode); + + + // // var 当前货名 = d6.t_code_goods.Where(x => x.代码 == item.goodscode).ToList(); + // //if (当前货名 == null || 当前货名.Count == 0) + // //{ + // // if (!string.IsNullOrWhiteSpace(item.goodscode)) + // // { + // // var newcodegoods = new t_code_goods_md(); + + // // newcodegoods.代码 = SetLength(item.goodscode, 10); + // // newcodegoods.货物名称 = SetLength(item.goodsname, 100); + // // 货物名称 = newcodegoods.货物名称; + // // newcodegoods.货物描述 = SetLength(item.description, 600); + // // newcodegoods.商品编码 = SetLength(item.hscode, 10); + // // d6.t_code_goods.Add(newcodegoods); + // // d6.SaveChanges(); + // // } + // //} + // //else + // //{ + // // 货物名称 = 当前货名[0].货物名称; + // //} + + // var newrec = new t_op_seae_assistant_md + // { + // 编号 = head.编号, + // 主编号 = head.编号, + // DJYCHILDRENID = item.Id, + // BSNO = item.bsno, + // 录入日期 = item.bsdate, + // 主提单号 = item.mblno, + // 分提单号 = item.hblno, + // //订舱序列号 = item.bookingno, + // 发货人代码 = 设置换行(item.shipper), + // 收货人代码 = 设置换行(item.consignee), + // 通知人代码 = 设置换行(item.notifyparty), + + // //20230605 + // 代理内容 = 设置换行(item.foreignAgent), + + // 提单份数 = item.nobill, + // 签单方式 = item.issuetype, + // 签单日期 = item.issuedate, + // 签单地点 = item.issueplace, + // 付费方式 = item.blfrt, + // 预付地点 = item.prepardat, + // 到付地点 = item.payableat, + // 运输条款 = item.service, + // 唛头 = 设置换行(item.marks), + // 运输方式 = item.hscode, + // 货物名称 = 货物名称, + // 货物描述 = 设置换行(item.description), + // 件数 = item.pkgs, + // 包装 = item.kindpkgs, + // 重量 = item.kgs, + // 尺码 = item.cbm, + // 件数大写 = item.totalno, + // 集装箱 = item.cntrtotal, + // 船公司 = item.carrier, + // 货物标识 = item.cargoid, + // 危险品分类 = item.dclass, + // 危险品编号 = item.dunno, + // 设置温度 = item.tempset, + // 冷藏通风量 = item.reeferf, + // 最低温度 = item.tempmin, + // 最高温度 = item.tempmax, + // 是否自有箱 = item.iscontainersoc, + // 委托编号 = item.pono, + // 操作员 = item.op, + // 揽货人 = item.sale, + // 客服员 = item.custservice, + // //总价 = (item.bookingEDIExt == null) ? 0M : item.bookingEDIExt.kingTareweight == null ? 0M : item.bookingEDIExt.kingTareweight, + // //预付地点= item.prepardatid, + // //到付地点= item.payableatid, + + // 周次 = weeks, + + // 运费协议号 = item.contractno, + + // 场站 = item.yard, + // 船名 = item.vessel, + // 航次 = item.voynoinner, + // 开船日期 = SetDayMinute(item.etd), + // 截港日期 = SetDayZero(item.closingdate), + // 预抵日期 = SetDayMinute(item.eta), + + // 装港代码 = item.portloadid, + // 装货港 = item.portload, + // 卸货代码 = item.portdischargeid, + // 卸货港 = item.portdischarge, + // 交货代码 = item.placedeliveryid, + // 交货地点 = item.placedelivery, + // 目的地代码 = item.destinationid, + // 目的地 = item.destination, + + // //集装箱 = 集装箱, + // 箱数大写 = 箱数大写, + + // 合同号 = item.pono, + + // 委托单位 = item.customername, + + // 报关行 = item.customser, + // 承运车队 = item.trucker, + // 货代公司 = item.forwarder,//大简云“订舱代理”,ds6界面的“订舱代理”,ds6数据库的货代 + // 备案号 = item.lanename, + // 航线 = item.lineName, + + // 代理 = item.agentname,//大简云“国外代理”,ds6界面的“代理”,ds6数据库的代理 + + + // 录入人 = createdUserName, + + + // 箱TEU = 箱型箱量.getTeu(), + // 箱型1 = 箱型箱量.get箱型1(), + // 箱型2 = 箱型箱量.get箱型2(), + // 箱型3 = 箱型箱量.get箱型3(), + // 箱型4 = 箱型箱量.get箱型4(), + // 箱型5 = 箱型箱量.get箱型5(), + // 箱型6 = 箱型箱量.get箱型6(), + // 箱型7 = 箱型箱量.get箱型7(), + // 箱型8 = 箱型箱量.get箱型8(), + // 箱型9 = 箱型箱量.get箱型9(), + // 箱型10 = 箱型箱量.get箱型10(), + + // 辅助字段一 = 设置换行(item.bookingEDIExt.exRemark1), + // 辅助字段二 = 设置换行(item.bookingEDIExt.exRemark2), + // 辅助字段三 = 设置换行(item.bookingEDIExt.exRemark3), + // 辅助字段四 = 设置换行(item.bookingEDIExt.exRemark4), + + // 箱号封号 = 箱号封号, + // 件数包装 = 件数包装, + // 货物重量 = 货物重量, + // 货物尺码 = 货物尺码 + // }; + + // var lengthDic = new Dictionary + // { + // {"主提单号",20}, + // {"分提单号",20}, + // {"发货人代码",1000}, + // {"收货人代码",1000}, + // {"通知人代码",1000}, + // {"提单份数",10}, + // {"签单方式",10}, + // {"签单地点",30}, + // {"付费方式",60}, + // {"预付地点",100}, + // {"到付地点",100}, + // {"运输条款",10}, + // {"唛头",800}, + // {"运输方式",10}, + // {"HS编码",30}, + // {"货物描述",1000}, + // //{"货物描述",1000}, + // {"包装",60}, + // {"件数大写",100}, + // {"集装箱",200}, + // {"船公司",20}, + // {"货物标识",1}, + // {"危险品分类",5}, + // {"危险品编号",20}, + // {"设置温度",16}, + // {"冷藏通风量",12}, + // {"最低温度",5}, + // {"最高温度",5}, + // {"委托编号",20}, + // {"操作员",10}, + // {"揽货人",10}, + // {"客服员",10}, + + // {"运费协议号",20}, + // {"场站",20}, + // {"船名",60}, + // {"航次",20}, + // {"装港代码",10}, + // {"装货港",60}, + // {"卸货代码",10}, + // {"卸货港",100}, + // {"交货代码",10}, + // {"交货地点",100}, + // {"目的地代码",10}, + // {"目的地",30}, + // {"合同号",50}, + // {"委托单位",20}, + // {"报关行",20}, + // {"承运车队",20}, + // {"货代公司",20}, + // {"备案号",20}, + // {"航线",30}, + // {"代理",20}, + // {"录入人",12}, + // {"辅助字段一",600}, + // {"辅助字段二",600}, + // {"辅助字段三",600}, + // {"辅助字段四",600}, + // }; + + + // //Set分单箱封号件重尺(ref newrec, item); + + + // foreach (var _item in lengthDic) + // { + // try + // { + // var value = newrec.GetType().GetProperty(_item.Key).GetValue(newrec).ToString(); + // var newvalue = SetLength(value, _item.Value); + // newrec.GetType().GetProperty(_item.Key).SetValue(newrec, newvalue); + // } + // catch (Exception e) + // { + // continue; + // } + // } + + // result.Add(newrec); + // } + + // return result; + //} + + public static void GetAssistant(ref t_op_seae_assistant_md curr, t_op_seae_assistant_md item) + { + + //curr.编号 = head.编号; + //curr.主编号 = item.编号; + curr.DJYCHILDRENID = item.DJYCHILDRENID; + curr.BSNO = item.BSNO; + curr.录入日期 = item.录入日期; + curr.主提单号 = item.主提单号; + curr.分提单号 = item.分提单号; + //订舱序列号 = item.bookingno; + curr.发货人代码 = item.发货人代码; + curr.收货人代码 = item.收货人代码; + curr.通知人代码 = item.通知人代码; + curr.代理内容 = item.代理内容; + curr.提单份数 = item.提单份数; + curr.签单方式 = item.签单方式; + curr.签单日期 = item.签单日期; + curr.签单地点 = item.签单地点; + curr.付费方式 = item.付费方式; + curr.预付地点 = item.预付地点; + curr.到付地点 = item.到付地点; + curr.运输条款 = item.运输条款; + curr.唛头 = item.唛头; + curr.运输方式 = item.运输方式; + curr.货物名称 = item.货物名称; + curr.货物描述 = item.货物描述; + curr.件数 = item.件数; + curr.包装 = item.包装; + curr.重量 = item.重量; + curr.尺码 = item.尺码; + curr.件数大写 = item.件数大写; + curr.集装箱 = item.集装箱; + curr.船公司 = item.船公司; + curr.货物标识 = item.货物标识; + curr.危险品分类 = item.危险品分类; + curr.危险品编号 = item.危险品编号; + curr.设置温度 = item.设置温度; + curr.冷藏通风量 = item.冷藏通风量; + curr.最低温度 = item.最低温度; + curr.最高温度 = item.最高温度; + curr.是否自有箱 = item.是否自有箱; + curr.委托编号 = item.委托编号; + curr.操作员 = item.操作员; + curr.揽货人 = item.揽货人; + curr.客服员 = item.客服员; + + curr.周次 = item.周次; + curr.运费协议号 = item.运费协议号; + + curr.运费协议号 = item.运费协议号; + curr.场站 = item.场站; + curr.船名 = item.船名; + curr.航次 = item.航次; + curr.开船日期 = item.开船日期; + curr.截港日期 = item.截港日期; + curr.预抵日期 = item.预抵日期; + curr.装港代码 = item.装港代码; + curr.装货港 = item.装货港; + curr.卸货代码 = item.卸货代码; + curr.卸货港 = item.卸货港; + curr.交货代码 = item.交货代码; + curr.交货地点 = item.交货地点; + curr.目的地代码 = item.目的地代码; + curr.目的地 = item.目的地; + curr.箱数大写 = item.箱数大写; + curr.合同号 = item.合同号; + curr.委托单位 = item.委托单位; + curr.报关行 = item.报关行; + curr.承运车队 = item.承运车队; + curr.货代公司 = item.货代公司; + curr.备案号 = item.备案号; + curr.航线 = item.航线; + curr.代理 = item.代理; + curr.录入人 = item.录入人; + + curr.箱TEU = item.箱TEU; + curr.箱型1 = item.箱型1; + curr.箱型2 = item.箱型2; + curr.箱型3 = item.箱型3; + curr.箱型4 = item.箱型4; + curr.箱型5 = item.箱型5; + curr.箱型6 = item.箱型6; + curr.箱型7 = item.箱型7; + curr.箱型8 = item.箱型8; + curr.箱型9 = item.箱型9; + curr.箱型10 = item.箱型10; + + curr.辅助字段一 = item.辅助字段一; + curr.辅助字段二 = item.辅助字段二; + curr.辅助字段三 = item.辅助字段三; + curr.辅助字段四 = item.辅助字段四; + curr.箱号封号 = item.箱号封号; + curr.件数包装 = item.件数包装; + curr.货物重量 = item.货物重量; + curr.货物尺码 = item.货物尺码; + + } + + public List GetOpStatus(t_op_seae_md head) + { + var result = new List(); + + if (goodsStatus != null && goodsStatus.Count > 0) + { + foreach (var item in goodsStatus) + { + var status = new t_op_state_md() + { + 编号 = head.编号, + 业务状态 = item.statusName, + 是否完成 = item.finishTime == null ? false : true, + 完成时间 = item.finishTime, + 完成人 = item.finishTime == null ? null : head.操作员, + 备注 = item.remark, + 录入人 = head.操作员, + 录入日期 = item.finishTime == null ? DateTime.Now : item.finishTime + }; + result.Add(status); + } + var _order = 1; + foreach (var item in result.OrderBy(x => x.录入日期)) + { + item.顺序 = _order; + _order++; + } + + } + + return result; + } + + + public DateTime StartDatetime { get; set; } + //public DingCangHead() { + // StartDatetime=DateTime.Now; + //} + } + + public class DingCangCtn + { + public long? id { get; set; } + public long? billid { get; set; } + public string ctncode { get; set; } //"string", + public string ctnall { get; set; } //"string", + public int? ctnnum { get; set; } = 0; + public int? teu { get; set; } = 0; + public string cntrno { get; set; } //"string", + public string sealno { get; set; } //"string", + public int? pkgs { get; set; } = 0; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0M; + public decimal? cbm { get; set; } = 0M; + public decimal? tareweight { get; set; } = 0M; + public string ctnstatus { get; set; } //"string", + public string weightype { get; set; } //"string", + public decimal? weighkgs { get; set; } = 0M; + public string weighattn { get; set; } //"string", + public string vgmconncom { get; set; } //"string", + public string weightel { get; set; } //"string", + public string weighdate { get; set; } //"string", + public string vgmaddr { get; set; } //"string", + public string vgmemail { get; set; } //"string", + public string remark { get; set; } //"string", + public List ctnDetailInputs { get; set; } + } + public class DingCangCtnDetail + { + public long? id { get; set; } + public string ctnid { get; set; } + public decimal? pkgs { get; set; } = 0M; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0M; + public decimal? cbm { get; set; } = 0M; + public string hscode { get; set; } //"string", + public string marks { get; set; } //"string", + public string description { get; set; } //"string", + public string remark { get; set; } + + } + public class DingCangbookingEDIExt + { + public string weiTuoFang { get; set; } //"string", + public string sendCode { get; set; } //"string", + public string receiveCode { get; set; } //"string", + public string notifyCdoe { get; set; } //"string", + public string salerCode { get; set; } //"string", + public string masterBolIndicator { get; set; } //"string", + public string emanifestHbl { get; set; } //"string", + public string consigneeEdiCode { get; set; } //"string", + public string shipperEdiCode { get; set; } //"string", + public string ediAttn { get; set; } //"string", + public string ediAttnTel { get; set; } //"string", + public string ediAttnMail { get; set; } //"string", + public string amsConsignee { get; set; } //"string", + public string amsNotifyParty { get; set; } //"string", + public string opEName { get; set; } //"string", + public string opTel { get; set; } //"string", + public string opEmail { get; set; } //"string", + public string acihbl { get; set; } //"string", + public string s0CC0C { get; set; } //"string", + public string goodsName { get; set; } //"string", + public string masterBolIndicatorName { get; set; } //"string", + public string salerCodeName { get; set; } //"string", + public string ckhi { get; set; } //"string", + public string cncm { get; set; } //"string", + public string wncm { get; set; } //"string", + public string orderRemark { get; set; } //"string", + public string exRemark1 { get; set; } //"string", + public string exRemark2 { get; set; } //"string", + public string exRemark3 { get; set; } //"string", + public string exRemark4 { get; set; } //"string", + public decimal? kingTareweight { get; set; } = 0M; + } + + + + /// + /// 提单信息 + /// + public class DingCangTDXX + { + + public long Id { get; set; } + + public string bsno { get; set; } //"string", + public string bsstatus { get; set; } //"string", + public string bsstatusname { get; set; } //"string", + public DateTime? bsdate { get; set; } //"2023-03-30T03:12:51.033Z", + public string mblno { get; set; } //"string", + public string hblno { get; set; } //"string", + public string bookingno { get; set; } //"string", + public string contractno { get; set; } //"string", + public string servicecontractno { get; set; } //"string", + public string shipperid { get; set; } //"string", + public string consigneeid { get; set; } //"string", + public string notifypartyid { get; set; } //"string", + public string shipper { get; set; } //"string", + public string consignee { get; set; } //"string", + public string notifyparty { get; set; } //"string", + public string notifypartY2 { get; set; } //"string", + public string yardid { get; set; } //"string", + public string yard { get; set; } //"string", + public string vesselid { get; set; } //"string", + public string vessel { get; set; } //"string", + public string voyno { get; set; } //"string", + public string voynoinner { get; set; } //"string", + public DateTime? etd { get; set; } //"2023-03-30T03:12:51.033Z", + + + public DateTime? atd { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closingdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closedocdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closevgmdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? eta { get; set; } //"2023-03-30T03:12:51.033Z", + public string placereceiptid { get; set; } //"string", + public string placereceipt { get; set; } //"string", + public string portloadid { get; set; } //"string", + public string portload { get; set; } //"string", + public string portdischargeid { get; set; } //"string", + public string portdischarge { get; set; } //"string", + public string placedeliveryid { get; set; } //"string", + public string placedelivery { get; set; } //"string", + public string destinationid { get; set; } //"string", + public string destination { get; set; } //"string", + public string nobill { get; set; } //"string", + public string copynobill { get; set; } //"string", + public string issuetype { get; set; } //"string", + public DateTime? issuedate { get; set; } //"2023-03-30T03:12:51.033Z", + public string issueplaceid { get; set; } //"string", + public string issueplace { get; set; } //"string", + public string blfrt { get; set; } //"string", + public string prepardat { get; set; } //"string", + public string payableat { get; set; } //"string", + public string service { get; set; } //"string", + public string marks { get; set; } //"string", + public string hscode { get; set; } //"string", + public string description { get; set; } //"string", + public int? pkgs { get; set; } = 0; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0; + public decimal? cbm { get; set; } = 0; + public string totalno { get; set; } //"string", + public string cntrtotal { get; set; } //"string", + public string carrierid { get; set; } //"string", + public string carrier { get; set; } //"string", + public string cargoid { get; set; } //"string", + public string dclass { get; set; } //"string", + public string dunno { get; set; } //"string", + public string dpage { get; set; } //"string", + public string dlabel { get; set; } //"string", + public string linkman { get; set; } //"string", + public string tempid { get; set; } //"string", + public string tempset { get; set; } //"string", + public string reeferf { get; set; } //"string", + public string humidity { get; set; } //"string", + public string tempmin { get; set; } //"string", + public string tempmax { get; set; } //"string", + public bool? iscontainersoc { get; set; } //true, + public string soremark { get; set; } //"string", + public string siremark { get; set; } //"string", + public string yardremark { get; set; } //"string", + public string compid { get; set; } //"string", + public string compname { get; set; } //"string", + public string shippername { get; set; } //"string", + public string shipperaddR1 { get; set; } //"string", + public string shipperaddR2 { get; set; } //"string", + public string shipperaddR3 { get; set; } //"string", + public string shippercity { get; set; } //"string", + public string shipperprovince { get; set; } //"string", + public string shipperpostcode { get; set; } //"string", + public string shippercountry { get; set; } //"string", + public string shipperattn { get; set; } //"string", + public string shippertel { get; set; } //"string", + public string consigneename { get; set; } //"string", + public string consigneeaddR1 { get; set; } //"string", + public string consigneeaddR2 { get; set; } //"string", + public string consigneeaddR3 { get; set; } //"string", + public string consigneecity { get; set; } //"string", + public string consigneeprovince { get; set; } //"string", + public string consigneepostcode { get; set; } //"string", + public string consigneercountry { get; set; } //"string", + public string consigneeattn { get; set; } //"string", + public string consigneetel { get; set; } //"string", + public string notifypartyname { get; set; } //"string", + public string notifypartyaddR1 { get; set; } //"string", + public string notifypartyaddR2 { get; set; } //"string", + public string notifypartyaddR3 { get; set; } //"string", + public string notifypartycity { get; set; } //"string", + public string notifypartyprovince { get; set; } //"string", + public string notifypartypostcode { get; set; } //"string", + public string notifypartycountry { get; set; } //"string", + public string notifypartyattn { get; set; } //"string", + public string notifypartytel { get; set; } //"string", + public string pono { get; set; } //"string", + public string opid { get; set; } //"string", + public string docid { get; set; } //"string", + public string op { get; set; } //"string", + public string doc { get; set; } //"string", + public string saleid { get; set; } //"string", + public string sale { get; set; } //"string", + public string custserviceid { get; set; } //"string", + public string custservice { get; set; } //"string", + public string customername { get; set; } //"string", + public string forwarder { get; set; } //"string", + public string shipagency { get; set; } //"string", + public string customser { get; set; } //"string", + public string trucker { get; set; } //"string", + public string agentid { get; set; } //"string", + public long? customerid { get; set; } //= 0; + public string forwarderid { get; set; } //"string", + public string shipagencyid { get; set; } //"string", + public string customserid { get; set; } //"string", + public string truckerid { get; set; } //"string", + public string agentname { get; set; } //"string", + + /// + /// 境外代理 内容 + /// + public string foreignAgent { get; set; } //境外代理, + + public string weituo { get; set; } //"string", + public string consigneedooraddr { get; set; } //"string", + public string shipperdooraddr { get; set; } //"string", + public string scaccode { get; set; } //"string", + public string itncode { get; set; } //"string", + public string prepardatid { get; set; } //"string", + public string payableatid { get; set; } //"string", + public string custno { get; set; } //"string", + public string transportid { get; set; } //"string", + public string transport { get; set; } //"string", + public string thirdpayaddr { get; set; } //"string", + public string yardcontract { get; set; } //"string", + public string yardcontracttel { get; set; } //"string", + public string yardcontractemail { get; set; } //"string", + public bool? feeself { get; set; } //true, + public string lanecode { get; set; } //"string", + public string lanename { get; set; } //"string", + public string freightpayer { get; set; } //"string", + public string goodscode { get; set; } //"string", + public string goodsname { get; set; } //"string", + public string pkgstotal { get; set; } //"string", + public string kgstotal { get; set; } //"string", + public string cbmtotal { get; set; } //"string", + public string routeid { get; set; } //"string", + public string route { get; set; } //"string", + public string warehouse { get; set; } //"string", + public string warehouseID { get; set; } //"string", + public string epCode { get; set; } //"string", + public string lineName { get; set; } //"string", + public List ctnInputs { get; set; } + public DingCangbookingEDIExt bookingEDIExt { get; set; } + } + + public class DingCanggoodsStatus + { + public string statusName { get; set; } //"string", + public DateTime? finishTime { get; set; }//2023-03-30T03:12:51.034Z", + public string remark { get; set; } //"string", + public string extData { get; set; }//"string", + + } + + public class 大简云业务函电 + { + public t_op_seae_md opseae { get; set; } + public t_op_letter_md HeadLetter { get; set; } = new t_op_letter_md(); + + public OpLetterBase ChildLetter { get; set; } + + public 大简云业务函电() { } + + public bool IsDeleted { get; set; } = false; + + public static 大简云业务函电 getHelper(string lettername, OpLetterBase childletter) + { + var ds6 = new DS6DataContext(); + var opseaeList = ds6.t_op_seae.Where(x => x.DJYID == childletter.DJYBOOKINGID).ToList(); + var result = new 大简云业务函电(); + if (opseaeList == null || opseaeList.Count == 0) + { + return result; + } + result.opseae = opseaeList[0]; + result.HeadLetter = new t_op_letter_md(); + result.HeadLetter.编号 = result.opseae.编号; + result.HeadLetter.函电名称 = lettername; + + //该字段用于:保存新增的业务函电时,需先保存op_letter ,但该表是自增序列号表, + //如这种业务函电在一个订舱中多于一个(如派车),则无法定位到正确的新增op_letter + //故增加此字段,以记录该条业务函电的主键。 + + //如这种业务函电在一个订舱中只有一个(如订舱),则djyid和DJYBOOKINGID字符串相同; + + //如多于一个(如派车),则op_letter.djybookingid=op_letter_pc.djybookingid + //且这种业务函电 需要在调用getHelper方法获得【大简云业务函电】对象时,传DJYBOOKINGID字段值 + result.HeadLetter.DJYBOOKINGID = childletter.DJYBOOKINGID; + result.HeadLetter.DJYLETTERID = childletter.DJYLETTERID; + + result.ChildLetter = childletter; + return result; + } + + public void DoSave() + { + if (string.IsNullOrWhiteSpace(HeadLetter.编号)) + { + return; + } + else + { + //如果具体业务函电已存在 则更新之 + //判断依据为是否存在 + SaveLetter(); + } + } + + public void SaveLetter(object 大简云对象 = null) + { + var result = new OpLetterBase(); + var ds6 = new DS6DataContext(); + + void SaveHeadLetter(string 函电名称) + { + // + ds6.t_op_letter.Add(HeadLetter); + ds6.SaveChanges(); + + var letterheads = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == HeadLetter.函电名称).ToList(); + + if (letterheads != null || letterheads.Count > 0) + { + + HeadLetter = letterheads[0]; + } + //return new t_op_letter_md(); + + } + + void UpdHeadLetter(string 函电名称) + { + // + + var UpdHeadLetterList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == 函电名称).ToList(); + + if (UpdHeadLetterList != null || UpdHeadLetterList.Count > 0) + { + var UpdHead = UpdHeadLetterList[0]; + UpdHead.HEAD_TO = HeadLetter.HEAD_TO; + UpdHead.HEAD_ATTN = HeadLetter.HEAD_ATTN; + UpdHead.签发人 = HeadLetter.签发人; + UpdHead.签发日期 = HeadLetter.签发日期; + } + //return new t_op_letter_md(); + + } + + void DelHeadLetter(string 函电名称) + { + var delheadList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == 函电名称).ToList(); + if (delheadList != null && delheadList.Count > 0) + { + var delhead = delheadList[0]; + ds6.t_op_letter.Remove(delhead); + } + } + + //没有找到业务 也就没有可以保存的op_letter 直接退出 + if (HeadLetter == null) return; + + //var currlist = new List(); + if (HeadLetter.函电名称 == "入货通知") + { + + var currHeadLetterList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == HeadLetter.函电名称).ToList(); + + var currlist = new List(); + + if (currHeadLetterList != null && currHeadLetterList.Count > 0) + { + var headid = currHeadLetterList[0].LE_ID; + currlist = ds6.t_op_letter_rh.Where(x => x.LE_ID == headid).ToList(); + } + + //首先判断是否为删除 如果是 执行删除 + if (IsDeleted) + { + //找到具体letter 如有则定位到opletter + //两个都要删除 + + if (currHeadLetterList != null && currHeadLetterList.Count > 0) + { + + //ds6.t_op_letter.Remove(currHeadLetterList[0]); + + if (currlist != null && currlist.Count > 0) + { + var delrec = currlist[0]; + ds6.t_op_letter_rh.Remove(delrec); + } + + DelHeadLetter(HeadLetter.函电名称); + + ds6.SaveChanges(); + return; + } + } + else + { + + if (currlist != null && currlist.Count > 0) + { + UpdHeadLetter(HeadLetter.函电名称); + //寻找 + var updrec = currlist[0]; + updrec.getCopy(ChildLetter, typeof(t_op_letter_rh_md)); + ds6.t_op_letter_rh.AddOrUpdate(updrec); + + } + else + { + SaveHeadLetter(HeadLetter.函电名称); + if (HeadLetter.LE_ID == 0) return; + ChildLetter.LE_ID = HeadLetter.LE_ID; + ds6.t_op_letter_rh.Add((t_op_letter_rh_md)ChildLetter); + } + } + } + if (HeadLetter.函电名称 == "派车通知") + { + var 派车对象 = (大简云派车)大简云对象; + + var currHeadLetterList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == HeadLetter.函电名称 && x.DJYLETTERID == HeadLetter.DJYLETTERID).ToList(); + + var currlist = new List(); + + if (currHeadLetterList != null && currHeadLetterList.Count > 0) + { + var headid = currHeadLetterList[0].LE_ID; + currlist = ds6.t_op_letter_pc.Where(x => x.LE_ID == headid).ToList(); + } + + if (IsDeleted) + { + //找到具体letter 如有则定位到opletter + //两个都要删除 + if (currlist != null && currlist.Count > 0) + { + var delrec = currlist[0]; + ds6.t_op_letter_pc.Remove(delrec); + + DelHeadLetter(HeadLetter.函电名称); + + ds6.SaveChanges(); + return; + } + opseae.承运车队 = ""; + opseae.派车日期 = null; + ds6.t_op_seae.AddOrUpdate(opseae); + } + else + { + opseae.承运车队 = ((t_op_letter_pc_md)ChildLetter).承运车队; + + var 派车日 = new DateTime(); + try + { + if (派车对象.main.truckTime != null) + { + 派车日 = (DateTime)(派车对象.main.truckTime); + 派车日 = new DateTime(派车日.Year, 派车日.Month, 派车日.Day); + } + } + catch (Exception) + { + } + + opseae.派车日期 = 派车日; + + ds6.t_op_seae.AddOrUpdate(opseae); + + if (currHeadLetterList == null || currHeadLetterList.Count == 0) + { + ds6.t_op_letter.Add(HeadLetter); + ds6.SaveChanges(); + + var letterheads = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.DJYLETTERID == HeadLetter.DJYLETTERID).ToList(); + + if (letterheads != null || letterheads.Count > 0) + { + HeadLetter = letterheads[0]; + } + } + + if (currlist != null && currlist.Count > 0) + { + //寻找 + var updrec = currlist[0]; + updrec.getCopy(ChildLetter, typeof(t_op_letter_pc_md)); + ds6.t_op_letter_pc.AddOrUpdate(updrec); + + } + else + { + + + if (HeadLetter.LE_ID == 0) return; + ChildLetter.LE_ID = HeadLetter.LE_ID; + ds6.t_op_letter_pc.Add((t_op_letter_pc_md)ChildLetter); + } + + + var ctninfo = 派车对象.main.contaList; + var currctn = ds6.t_op_letter_pc_ctn.Where(x => x.LE_ID == HeadLetter.LE_ID).ToList(); + + if (currctn != null && currctn.Count > 0) + { + ds6.t_op_letter_pc_ctn.RemoveRange(currctn); + } + + if (ctninfo != null && ctninfo.Count > 0) + { + foreach (var djyctn in ctninfo) + { + var newctn = djyctn.GetPcCtn(HeadLetter); + ds6.t_op_letter_pc_ctn.Add(newctn); + } + } + } + + + } + + ds6.SaveChanges(); + } + } + + public class 大简云入货通知 + { + public long BookingId { get; set; } + + public long Id { get; set; } + /// + /// TO + /// + public string ToName { get; set; } + /// + /// ATTN + /// + public string Attn { get; set; } + /// + /// ATTN电话 + /// + public string AttnTel { get; set; } + /// + /// ATTN邮箱 + /// + public string AttnMail { get; set; } + /// + /// FROM + /// + public string FromName { get; set; } + /// + /// FROM电话 + /// + public string FromTel { get; set; } + /// + /// FROM邮箱 + /// + public string FromMail { get; set; } + /// + /// 描述 + /// + public string Description { get; set; } + /// + /// 截单时间 + /// + public DateTime? CloseDocTime { get; set; } + /// + /// 截港时间 + /// + public DateTime? ClosingTime { get; set; } + /// + /// 截VGM时间 + /// + public DateTime? VgmTime { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } + + /// + /// 场站代码 + /// + public string YARDID { get; set; } + /// + /// 场站 + /// + public string YARD { get; set; } + /// + /// 场站联系人 + /// + public string YARDCONTRACT { get; set; } + /// + /// 场站联系人电话 + /// + public string YARDCONTRACTTEL { get; set; } + + /// + /// 是否删除 ture删除 否则新增或修改 + /// + public bool IsDeleted { get; set; } = false; + + public 大简云业务函电 GetLetter() + { + var letterchild = new t_op_letter_rh_md + { + LE_ID = 0, + 入货场站 = SetLength(YARD, 30), + 入货截至时间 = ClosingTime == null ? "" : ((DateTime)ClosingTime).ToString("yyyy-MM-dd"), + 场站联系人 = SetLength(YARDCONTRACT, 60), + 场站联系电话 = SetLength(YARDCONTRACTTEL, 60), + 备注 = SetLength(Remark, 200), + DJYLETTERID = Id, + DJYBOOKINGID = BookingId + }; + var result = 大简云业务函电.getHelper("入货通知", letterchild); + result.HeadLetter.HEAD_TO = SetLength(ToName, 60); + result.HeadLetter.HEAD_ATTN = SetLength(Attn, 60); + result.HeadLetter.签发人 = SetLength(FromName, 10); + result.HeadLetter.签发日期 = DateTime.Now; + + result.IsDeleted = IsDeleted; + //result.IsDeleted = true; + return result; + } + } + + public class 大简云派车 + { + public class 派车head + { + public long gid { get; set; } + public string messageType { get; set; } + public string senderId { get; set; } + public string senderName { get; set; } + public string receiverId { get; set; } + public string receiverName { get; set; } + public string token { get; set; } + public string version { get; set; } + public string requestDate { get; set; } + public string senderKey { get; set; } + public string requestAction { get; set; } + } + + public class 派车main + { + public string operType { get; set; } + + //tenantId + + /// + /// 派车单ID + /// + public long id { get; set; } + /// + /// 订舱ID + /// + public long bookingId { get; set; } + + public long? truckId { get; set; } + public string truckCode { get; set; } + public string truckName { get; set; } + public string toName { get; set; } + public string attn { get; set; } + public string attnTel { get; set; } + public string attnMail { get; set; } + public string attnFax { get; set; } + public string fromName { get; set; } + public string fromTel { get; set; } + public string fromMail { get; set; } + public string fromFax { get; set; } + public decimal? kgs { get; set; } + public decimal? fee { get; set; } + public string payMethod { get; set; } + public string payMethodName { get; set; } + public DateTime? truckTime { get; set; } + public string yardid { get; set; } + public string yard { get; set; } + public string yardcontract { get; set; } + public string yardcontracttel { get; set; } + public string factoryId { get; set; } + public string factoryCode { get; set; } + public string factoryName { get; set; } + public string factoryContact { get; set; } + public string factoryTel { get; set; } + public string returnTime { get; set; } + public string inYardID { get; set; } + public string inYard { get; set; } + public string inYardContact { get; set; } + public string inYardContractTel { get; set; } + public DateTime? needArriveTime { get; set; } + public string closingTime { get; set; } + public string pickUpTime { get; set; } + public string isGuaJi { get; set; } + public string attention { get; set; } + public string remark { get; set; } + public string dispatcherId { get; set; } + public string dispatcherName { get; set; } + public string factoryAddr { get; set; } + public string callBackStatus { get; set; } + + public bool IsDeleted + { + get + { + return operType == "Delete"; + } + } + public List contaList { get; set; } = new List(); + + public string 箱型箱量() + { + var result = ""; + var 箱型箱量dic = new Dictionary(); + foreach (var conta in contaList) + { + if (箱型箱量dic.ContainsKey(conta.ctnall)) + { + 箱型箱量dic[conta.ctnall] += conta.ctnnum == null ? 0 : (int)conta.ctnnum; + } + else + { + 箱型箱量dic.Add(conta.ctnall, conta.ctnnum == null ? 0 : (int)conta.ctnnum); + } + } + + if (箱型箱量dic.Count > 0) + { + foreach (var item in 箱型箱量dic) + { + if (result == "") result += " "; + result += item.Key + "*" + item.Value.ToString(); + } + + } + + return result; + } + } + + public class conta + { + public string ctncode { get; set; } + public string ctnall { get; set; } + public int? ctnnum { get; set; } + public int? teu { get; set; } + public string cntrno { get; set; } + public string sealno { get; set; } + public decimal? pkgs { get; set; } + public string kindpkgs { get; set; } + public decimal? kgs { get; set; } + public decimal? cbm { get; set; } + public decimal? tareweight { get; set; } + public string ctnstatus { get; set; } + public string weightype { get; set; } + public string weighkgs { get; set; } + public string weighattn { get; set; } + public string vgmconncom { get; set; } + public string weightel { get; set; } + public string weighdate { get; set; } + public string vgmaddr { get; set; } + public string vgmemail { get; set; } + public string remark { get; set; } + public string carNumber { get; set; } + public string carDriver { get; set; } + public string carDriverTel { get; set; } + + public t_op_letter_pc_ctn_md GetPcCtn(t_op_letter_md HeadLetter) + { + var result = new t_op_letter_pc_ctn_md() + { + LE_ID = HeadLetter.LE_ID, + 表现形式 = ctnall, + 箱号 = cntrno, + 封号 = sealno, + 数量 = ctnnum == null ? 0 : (int)ctnnum, + 件数 = pkgs == null ? 0 : (int)pkgs, + 包装 = kindpkgs, + 重量 = kgs, + 尺码 = cbm, + 车牌号 = carNumber, + 司机 = carDriver, + 司机电话 = carDriverTel + }; + return result; + } + } + + public 派车head head { get; set; } + public 派车main main { get; set; } + + + public 大简云业务函电 GetLetter() + { + var letterchild = new t_op_letter_pc_md + { + 承运车队 = SetLength(main.truckName, 30), + 箱型箱量 = SetLength(main.箱型箱量(), 50), + 背箱场站 = SetLength(main.yard, 30), + 场站联系人 = SetLength(main.yardcontract, 60), + 场站电话 = SetLength(main.yardcontracttel, 60), + 要求到厂时间 = main.needArriveTime == null ? "" : ((DateTime)main.needArriveTime).ToString("yyyy-MM-dd HH:mm:ss"), + 厂家地址 = SetLength(main.factoryAddr, 100), + 厂家联系人 = SetLength(main.factoryContact, 60), + 厂家联系电话 = SetLength(main.factoryTel, 60), + 返箱地址 = SetLength(main.inYard, 100), + 返箱联系人 = SetLength(main.inYardContact, 60), + 返箱联系电话 = SetLength(main.inYardContractTel, 60), + 备注 = SetLength(main.remark, 200), + 陆运费 = main.fee, + 结算方式 = main.payMethodName, + DJYLETTERID = main.id, + DJYBOOKINGID = main.bookingId + }; + var result = 大简云业务函电.getHelper("派车通知", letterchild); + if (result.HeadLetter == null) return result; + result.IsDeleted = main.IsDeleted; + if (!string.IsNullOrWhiteSpace(main.toName)) + result.HeadLetter.HEAD_TO = SetLength(main.toName, 60); + if (!string.IsNullOrWhiteSpace(main.attn)) + result.HeadLetter.HEAD_ATTN = SetLength(main.attn, 60); + if (!string.IsNullOrWhiteSpace(main.fromName)) + result.HeadLetter.签发人 = SetLength(main.fromName, 10); + if (!string.IsNullOrWhiteSpace(main.fromName)) + result.HeadLetter.签发日期 = DateTime.Now; + return result; + } + + } + + /// + /// 回推客户订舱审核状态 + /// + public class CustOrderStatus + { + public string Type { get; set; } + + public CustOrderStatus_Data Data { get; set; } + public bool is通过() + { + return Type == "CustOrderStatusAccept"; + } + + public bool is驳回() + { + return Type == "CustOrderStatusAccept"; + } + } + public class CustOrderStatus_Data + { + public string BSNO { get; set; } + public string BSSTATUS { get; set; } + public long? BookingOrderId { get; set; } + public string COMMENT { get; set; }//驳回原因 + + + } + + + public static string NumberToEnglishString(int number) + { + if (number < 0) //暂不考虑负数 + { + return ""; + } + if (number < 20) //0到19 + { + switch (number) + { + case 0: + return "zero"; + case 1: + return "one"; + case 2: + return "two"; + case 3: + return "three"; + case 4: + return "four"; + case 5: + return "five"; + case 6: + return "sex"; + case 7: + return "seven"; + case 8: + return "eight"; + case 9: + return "nine"; + case 10: + return "ten"; + case 11: + return "eleven"; + case 12: + return "twelve"; + case 13: + return "thirteen"; + case 14: + return "fourteen"; + case 15: + return "fifteen"; + case 16: + return "sixteen"; + case 17: + return "seventeen"; + case 18: + return "eighteen"; + case 19: + return "nineteen"; + default: + return ""; + } + } + if (number < 100) //20到99 + { + if (number % 10 == 0) //20,30,40,...90的输出 + { + switch (number) + { + case 20: + return "twenty"; + case 30: + return "thirty"; + case 40: + return "forty"; + case 50: + return "fifty"; + case 60: + return "sixty"; + case 70: + return "seventy"; + case 80: + return "eighty"; + case 90: + return "ninety"; + default: + return ""; + } + } + else //21.22,.99 思路:26=20+6 + { + return string.Format("{0} {1}", NumberToEnglishString(10 * (number / 10)), + NumberToEnglishString(number % 10)); + } + } + if (number < 1000) //100到999 百级 + { + if (number % 100 == 0) + { + return string.Format("{0} hundred", NumberToEnglishString(number / 100)); + } + else + { + return string.Format("{0} hundred and {1}", NumberToEnglishString(number / 100), + NumberToEnglishString(number % 100)); + } + } + if (number < 1000000) //1000到999999 千级 + { + if (number % 1000 == 0) + { + return string.Format("{0} thousand", NumberToEnglishString(number / 1000)); + } + else + { + return string.Format("{0} thousand and {1}", NumberToEnglishString(number / 1000), + NumberToEnglishString(number % 1000)); + } + } + if (number < 1000000000) //1000 000到999 999 999 百万级 + { + if (number % 1000 == 0) + { + return string.Format("{0} million", NumberToEnglishString(number / 1000000)); + } + else + { + return string.Format("{0} million and {1}", NumberToEnglishString(number / 1000000), + NumberToEnglishString(number % 1000000)); + } + } + if (number <= int.MaxValue) //十亿 级 + { + if (number % 1000000000 == 0) + { + return string.Format("{0} billion", NumberToEnglishString(number / 1000000000)); + } + else + { + return string.Format("{0} billion and {1}", NumberToEnglishString(number / 1000000000), + NumberToEnglishString(number % 1000000000)); + } + } + return ""; + } + + public static string SetLength(string oldstr, int length) + { + var str = string.IsNullOrWhiteSpace(oldstr) ? "" : (len(oldstr) > length) ? SubString2(oldstr, 0, length) : oldstr; + return str; + } + + public static int len(string str) + { + System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding(); + byte[] b = n.GetBytes(str); + int length = 0; // l 为字符串的实际长度 + for (int i = 0; i <= b.Length - 1; i++) + { + if (b[i] == 63) //判断是否为汉字或全脚符号 + { + length++; + } + length++; + } + return length; + } + + public static string SubString2(string str, int startIndex, int length) + { + byte[] b = System.Text.Encoding.Default.GetBytes(str); + if (length > b.Length) + { + length = b.Length; + } + return System.Text.Encoding.Default.GetString(b, startIndex, length); + } + + public static DateTime? SetDayZero(DateTime? dt) + { + var result = new DateTime?(); + result = null; + if (dt != null) result = new DateTime(((DateTime)dt).Year, ((DateTime)dt).Month, ((DateTime)dt).Day); + return result; + } + + public static DateTime? SetDayMinute(DateTime? dt) + { + var result = new DateTime?(); + result = null; + if (dt != null) result = new DateTime(((DateTime)dt).Year, ((DateTime)dt).Month, ((DateTime)dt).Day, ((DateTime)dt).Hour, ((DateTime)dt).Minute, ((DateTime)dt).Second); + return result; + } + + public static string SetDayMinute_Str(DateTime? dt) + { + var _dt = SetDayMinute(dt); + + var result = _dt == null ? "" : ((DateTime)SetDayMinute(_dt)).ToString("yyyy-MM-dd"); + + return result; + } + + public static string SetDayZero_Str(DateTime? dt) + { + var _dt = SetDayZero(dt); + + var result = _dt == null ? "" : ((DateTime)SetDayMinute(_dt)).ToString("yyyy-MM-dd"); + + return result; + } + public static string 设置换行(string str) + { + if (string.IsNullOrWhiteSpace(str)) return ""; + + var myStr = Regex.Replace(str, "(? public string TF_BLSTATUS{ get; set; } + + [ModelDB(MDBType = ModelDBOprationType.Insert)] + public long? DJYID { get; set; } + #endregion public MsOpSeae() diff --git a/DSWeb/Areas/MvcShipping/Models/MsOpSeae/MsOpSeaeDetail.cs b/DSWeb/Areas/MvcShipping/Models/MsOpSeae/MsOpSeaeDetail.cs index e5cdb0fa..2b2d0505 100644 --- a/DSWeb/Areas/MvcShipping/Models/MsOpSeae/MsOpSeaeDetail.cs +++ b/DSWeb/Areas/MvcShipping/Models/MsOpSeae/MsOpSeaeDetail.cs @@ -522,6 +522,10 @@ namespace DSWeb.MvcShipping.Models.MsOpSeae set { _CTNFEE = value; } } + + + [ModelDB(MDBType = ModelDBOprationType.Insert)] + public long? DJYCTNID { get; set; } #endregion diff --git a/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/MsOpSeaeEdit.js b/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/MsOpSeaeEdit.js index bb26031a..c30435c2 100644 --- a/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/MsOpSeaeEdit.js +++ b/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/MsOpSeaeEdit.js @@ -1498,17 +1498,11 @@ Ext.extend(Shipping.MsOpSeaeEdit, Ext.Panel, { layout: 'hbox', defaultType: 'textfield', - items: [{ - //labelWidth: 100, - fieldLabel: Zi.LAN.DJYMAILINFO,//'订舱时间', - flex: 1, - readOnly:true, - name: 'DJYMAILINFO' - }, { + items: [ { //labelWidth: 100, fieldLabel: Zi.LAN.DjyService, format: 'Y-m-d', - flex: 2, + flex: 3, readOnly: true, //xtype: 'datefield', //labelWidth: 55, @@ -1516,17 +1510,69 @@ Ext.extend(Shipping.MsOpSeaeEdit, Ext.Panel, { }, { //labelWidth: 100, - fieldLabel: Zi.LAN.DjyDCYQ,//'订舱时间', - flex: 2, + fieldLabel: Zi.LAN.DjyDCYQ,//'订舱要求', + flex: 3, readOnly: true, name: 'DCYQ' - }, + } + //, //{ xtype: "hiddenfield" }, //{ xtype: "hiddenfield" }, - { xtype: "hiddenfield" } + //{ xtype: "hiddenfield" } ] } + + , { + xtype: 'container', + layout: 'hbox', + flex: 1, + defaultType: 'textfield', + items: [ + + { + //labelWidth: 100, + fieldLabel: Zi.LAN.DJYMAILINFO,//'订舱时间', + flex: 1, + readOnly: true, + name: 'DJYMAILINFO' + }, + { + xtype: 'textfield', + //grow: true, + flex: 5, + readOnly: true, + fieldLabel: Zi.LAN.DjyDCSPJG, //'订舱审批结果', + //height: 60, + name: 'DjyDCSPJG', + anchor: '100%' + }//, { xtype: "hiddenfield",flex: 2 } + ] + } + , { + xtype: 'container', + layout: 'hbox', + flex: 1, + defaultType: 'textfield', + items: [ + { + xtype: 'textareafield', + grow: true, + flex: 2, + fieldLabel: Zi.LAN.REMARK, //'备注', + height: 60, + name: 'REMARK', + anchor: '100%' + }, { + xtype: 'textareafield', + grow: true, + fieldLabel: Zi.LAN.OTREMARK, //'备注', + height: 60, + name: 'OPERATORFAX', + anchor: '100%' + } + ] + } ]//end items(fieldset 1) }); //end this.formEdit @@ -4262,30 +4308,32 @@ Ext.extend(Shipping.MsOpSeaeEdit, Ext.Panel, { name: 'ISGAIQIAN' } ] - }, { - xtype: 'container', - layout: 'hbox', - flex: 1, - defaultType: 'textfield', - items: [ - { - xtype: 'textareafield', - grow: true, - flex: 2, - fieldLabel: Zi.LAN.REMARK, //'备注', - height: 60, - name: 'REMARK', - anchor: '100%' - }, { - xtype: 'textareafield', - grow: true, - fieldLabel: Zi.LAN.OTREMARK, //'备注', - height: 60, - name: 'OPERATORFAX', - anchor: '100%' - } - ] } + + //, { + // xtype: 'container', + // layout: 'hbox', + // flex: 1, + // defaultType: 'textfield', + // items: [ + // { + // xtype: 'textareafield', + // grow: true, + // flex: 2, + // fieldLabel: Zi.LAN.REMARK, //'备注', + // height: 60, + // name: 'REMARK', + // anchor: '100%' + // }, { + // xtype: 'textareafield', + // grow: true, + // fieldLabel: Zi.LAN.OTREMARK, //'备注', + // height: 60, + // name: 'OPERATORFAX', + // anchor: '100%' + // } + // ] + //} ] } ] @@ -11987,77 +12035,19 @@ Ext.extend(Shipping.MsOpSeaeEdit, Ext.Panel, { text: Zi.LAN.QueDingFaSong, //"确定发送", minWidth: 70, handler: function () { - var BSNO = me.editRecord.get('BSNO'); - - var _form = Ext.getCmp("formDjyOrder"); - var data = _form.getForm().getValues(false, false, false); - var str = Ext.JSON.encode(data); - - var feeGidSql = ''; - var selectedRecords = []; - selectedRecords = me.DocCM.selected.items; - if (selectedRecords.length > 0) { - for (var i = 0; i < selectedRecords.length; i++) { - var rec = selectedRecords[i]; - if (rec.data.GID == "*") //如果是新增但没有保存的数据,没有必要提交到后台 - { - me.storeDocList.remove(selectedRecords[i]); - } else { - var feeGId = "" + rec.data.GID + ""; - if (feeGidSql == '') { - feeGidSql = feeGId; - } else { - feeGidSql = feeGidSql + "," + feeGId; - } - } - } - } + me.DoSendDjyOrder(); + } + } - //Ext.Msg.show({ title: '提示', msg: str, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK }); - Ext.Ajax.request({ - url: '/CommMng/BasicDataRef/SendOpseaeEmailToDjy', - cors: true, - params: { - BSNO: BSNO, - str: str, - FileGidList: feeGidSql - }, + //, { + //text: Zi.LAN.btndelete, //"删除", + //minWidth: 70, + //handler: function () { - //method: 'post', - success: function (response) { - var resultData = eval('(' + response.responseText + ')');//JSON字符串=>JSON对象 - if (!resultData.Success) { - //失败 - Ext.Msg.show({ - title: '提示', - msg: resultData.Message, - icon: Ext.MessageBox.ERROR, - buttons: Ext.Msg.OK - }); - return; - } - else { - //Ext.Msg.show({ - // title: '提示', - // msg: resultData.Message, - // icon: Ext.MessageBox.OK, - // buttons: Ext.Msg.OK - //}); - MsgTip("提示", resultData.Message); - - me.GetLogic(); - me.winDjyOrderShow.close(); - } - } - }); - } - }, { - text: Zi.LAN.btndelete, //"删除", - minWidth: 70, - handler: function () { + //} + //} - } - }, { + , { text: Zi.LAN.GuanBi, //"关闭", minWidth: 70, handler: function () { @@ -22000,6 +21990,7 @@ Ext.extend(Shipping.MsOpSeaeEdit, Ext.Panel, { buttons: Ext.Msg.OK }); } else { + var BSNO = this.Editdata.BSNO; //此时加载一次该船公司的第三方账号 this.storeThirdAccount.load({ @@ -22441,5 +22432,107 @@ Ext.extend(Shipping.MsOpSeaeEdit, Ext.Panel, { } }); } + + + , DoSendDjyOrder: function () + { + + + + var BSNO = me.editRecord.get('BSNO'); + + var _form = Ext.getCmp("formDjyOrder"); + var data = _form.getForm().getValues(false, false, false); + var str = Ext.JSON.encode(data); + + if (!data.THIRDACCOUNT) + { + Ext.Msg.show({ + title: '提示', + msg: "必须选择船公司账号。如果没有,需要在第三方账号当中进行维护", + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + return; + } + + var feeGidSql = ''; + var selectedRecords = []; + selectedRecords = me.DocCM.selected.items; + if (selectedRecords.length > 0) { + for (var i = 0; i < selectedRecords.length; i++) { + var rec = selectedRecords[i]; + if (rec.data.GID == "*") //如果是新增但没有保存的数据,没有必要提交到后台 + { + me.storeDocList.remove(selectedRecords[i]); + } else { + var feeGId = "" + rec.data.GID + ""; + if (feeGidSql == '') { + feeGidSql = feeGId; + } else { + feeGidSql = feeGidSql + "," + feeGId; + } + } + } + } + + Ext.Msg.wait(Zi.LAN.ZhengZaiCaoZuoShuJu); + //Ext.Msg.show({ title: '提示', msg: str, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK }); + Ext.Ajax.request({ + //waitMsg: '正在发送请求', + url: '/CommMng/BasicDataRef/SendOpseaeEmailToDjy', + cors: true, + params: { + BSNO: BSNO, + str: str, + FileGidList: feeGidSql + }, + + //method: 'post', + success: function (response) { + Ext.MessageBox.hide(); + var resultData = eval('(' + response.responseText + ')');//JSON字符串=>JSON对象 + if (!resultData.Success) { + + //失败 + this.Ext.Msg.show({ + title: '提示', + msg: resultData.Message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + me.GetLogic(); + //return; + me.winDjyOrderShow.close(); + } + else { + + //Ext.Msg.show({ + // title: '提示', + // msg: resultData.Message, + // icon: Ext.MessageBox.OK, + // buttons: Ext.Msg.OK + //}); + //MsgTip("提示", resultData.Message,1500); + me.GetLogic(); + Ext.Msg.show({ + title: "提示", + msg: resultData.Message, + modal: false, + buttons: Ext.MessageBox.OK, + icon: Ext.MessageBox.INFO + }); + setTimeout(function () { + Ext.MessageBox.hide(); + Ext.Msg.hide(); + me.winDjyOrderShow.close(); + }, 1500); + + } + + + } + }); + } }); diff --git a/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/Zi_zh-cn.js b/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/Zi_zh-cn.js index aee4ab4b..973f1a20 100644 --- a/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/Zi_zh-cn.js +++ b/DSWeb/Areas/MvcShipping/Viewsjs/MsOpSeae/Zi_zh-cn.js @@ -358,6 +358,7 @@ Zi.LAN.winDjyOrderShow = "大简云订舱"; Zi.LAN.DJYMAILINFO = "订舱时间"; Zi.LAN.DjyService = "订舱选项"; Zi.LAN.DjyDCYQ = "订舱要求"; +Zi.LAN.DjyDCSPJG = "订舱审批"; Zi.LAN.YARD = "场站"; diff --git a/DSWeb/DSWeb.csproj b/DSWeb/DSWeb.csproj index 4bbda8aa..2ee69197 100644 --- a/DSWeb/DSWeb.csproj +++ b/DSWeb/DSWeb.csproj @@ -327,6 +327,9 @@ ..\packages\Quartz.2.6.2\lib\net40\Quartz.dll + + ..\packages\RabbitMQ.Client.3.6.9\lib\net45\RabbitMQ.Client.dll + DLL\Renci.SshNet.dll diff --git a/DSWeb/Global.asax.cs b/DSWeb/Global.asax.cs index 7c580e2d..73c0f75b 100644 --- a/DSWeb/Global.asax.cs +++ b/DSWeb/Global.asax.cs @@ -20,6 +20,10 @@ using DSWeb.Areas.MvcShipping.Models.MsOpRule; using DSWeb.Areas.MvcShipping.Models.MsOpSeaeRunBill; using DSWeb.Areas.MvcShipping.Comm; using BookingWeb.DB.Model; +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; +using DSWeb.Areas.CommMng.DAL; namespace DSWeb { @@ -110,6 +114,21 @@ namespace DSWeb myTimer.AutoReset = true; } + var ReceiveDjydc = BasicDataRefDAL. getConfigAppSetting("ReceiveDjydc"); + if (ReceiveDjydc == "true") + { + //SaveLog("", "", "接收大简云订舱", "启动接收"); + DoReceiveDjydc(); + } + + var ReceiveMQUri_CustOrderStatus= BasicDataRefDAL.getConfigAppSetting("ReceiveMQUri_CustOrderStatus"); + if (!string.IsNullOrWhiteSpace( ReceiveMQUri_CustOrderStatus)) + { + //接收推送的返回审批结果 + DoReceiveDjyCustOrderStatus(); + } + + InitMapper(); JobScheduler.Start(); @@ -283,5 +302,159 @@ namespace DSWeb }); } + + + + private IConnection mqConn; + private const string ExchangeName = "output"; + + + #region 接收大简云订舱业务 + private void DoReceiveDjydc() + { + + var RecMqUri = ConfigurationManager.AppSettings["ReceiveMQUri"]; + var 消费队列数据 = true; + + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = RecMqUri; + + mqConn = factory.CreateConnection(); + + IModel modelDingCang = mqConn.CreateModel(); + + if (!string.IsNullOrWhiteSpace(ExchangeName)) + modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + + var QueuePrefix_DingCang = ConfigurationManager.AppSettings["QueuePrefix_DingCang"]; + var DjydcCompanyid = ConfigurationManager.AppSettings["DjydcCompanyid"]; + + modelDingCang.QueueDeclare($"{QueuePrefix_DingCang}{DjydcCompanyid}", false, false, false, null); + + var consumerDingCang = new EventingBasicConsumer(modelDingCang); + consumerDingCang.Received += (ch, ea) => + { + var body = ea.Body; + + try + { + ////不压缩 + //var strBody = Encoding.UTF8.GetString(body.ToArray()); + + ////压缩 + + var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); + //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); + + //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); + + //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); + + var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); + + BasicDataRefDAL.SaveLog(strBody, "", "接收大简云订舱", "解压内容"); + //测试数据不需解压缩 + //var strBody = strBodyZip; + //logger.Debug($"收到大简云订舱输出数据:{strBody}"); + + //导出到东胜6 + //if(strBody.Contains("TAHT30633700")) + DSWeb.Areas.CommMng.DAL.MqWorkDAL.DingCangToDS7(strBody); + } + catch (Exception ex) + { + var excep = ex; + while (excep != null) + { + //logger.Error(excep.Message); + //logger.Error(excep.StackTrace); + + excep = excep.InnerException; + } + } + + }; + //第二个参数控制【是否消费掉队列里的数据】 + modelDingCang.BasicConsume($"{QueuePrefix_DingCang}{DjydcCompanyid}", 消费队列数据, consumerDingCang); + + } + #endregion + + #region 接收大简云订舱审核状态回推 + + /// + /// 接收大简云订舱审核状态回推 + /// 下半部分 审核通过与驳回 + /// http://60.209.125.238:32222/single/file/3N4oTLdFSBl1IyN55BeAZKVPC3CBeg3VjrGhIxDaHw9BaGdDy5lj8HETUtMNxVIP + /// + private void DoReceiveDjyCustOrderStatus() + { + + var RecMqUri = ConfigurationManager.AppSettings["ReceiveMQUri_CustOrderStatus"]; + var 消费队列数据 = true; + + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = RecMqUri; + + mqConn = factory.CreateConnection(); + + IModel modelDingCang = mqConn.CreateModel(); + + if (!string.IsNullOrWhiteSpace(ExchangeName)) + modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + + var QueuePrefix = ConfigurationManager.AppSettings["QueuePrefix_CustOrderStatus"]; + var DjydcCompanyid = ConfigurationManager.AppSettings["DjydcCompanyid"]; + + modelDingCang.QueueDeclare($"{QueuePrefix}{DjydcCompanyid}", false, false, false, null); + + var consumerDingCang = new EventingBasicConsumer(modelDingCang); + consumerDingCang.Received += (ch, ea) => + { + var body = ea.Body; + + try + { + ////不压缩 + //var strBody = Encoding.UTF8.GetString(body.ToArray()); + + ////压缩 + + var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); + //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); + + //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); + + //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); + + var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); + + Areas.CommMng.DAL.BasicDataRefDAL.SaveLog(strBody, "", "接收大简云订舱", "解压内容"); + //测试数据不需解压缩 + //var strBody = strBodyZip; + //logger.Debug($"收到大简云订舱输出数据:{strBody}"); + + //导出到东胜6 + //if(strBody.Contains("TAHT30633700")) + DSWeb.Areas.CommMng.DAL.MqWorkDAL.CustOrderStatusToDS7(strBody); + } + catch (Exception ex) + { + var excep = ex; + while (excep != null) + { + //logger.Error(excep.Message); + //logger.Error(excep.StackTrace); + + excep = excep.InnerException; + } + } + + }; + //第二个参数控制【是否消费掉队列里的数据】 + modelDingCang.BasicConsume($"{QueuePrefix}{DjydcCompanyid}", 消费队列数据, consumerDingCang); + + } + #endregion } } \ No newline at end of file diff --git a/DSWeb/Web.config b/DSWeb/Web.config index 6823edce..f98e10a5 100644 --- a/DSWeb/Web.config +++ b/DSWeb/Web.config @@ -75,6 +75,28 @@ + + + + + + + + + + + + + + + + + + diff --git a/DSWeb/bin/RabbitMQ.Client.dll b/DSWeb/bin/RabbitMQ.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..d2a564f6ec01ee6557d9d6252f1e4d3d9dc86c93 GIT binary patch literal 265728 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 literal 0 HcmV?d00001 diff --git a/DSWeb/bin/RabbitMQ.Client.xml b/DSWeb/bin/RabbitMQ.Client.xml new file mode 100644 index 00000000..8edcd324 --- /dev/null +++ b/DSWeb/bin/RabbitMQ.Client.xml @@ -0,0 +1,6743 @@ + + + + RabbitMQ.Client + + + + + Object describing various overarching parameters + associated with a particular AMQP protocol variant. + + + + + Construct a connection from a given set of parameters, + a frame handler, and no automatic recovery. + The "insist" parameter is passed on to the AMQP connection.open method. + + + + + Construct a connection from a given set of parameters, + a frame handler, and automatic recovery settings. + + + + + Construct a connection from a given set of parameters, + a frame handler, a client-provided name, and no automatic recovery. + The "insist" parameter is passed on to the AMQP connection.open method. + + + + + Construct a connection from a given set of parameters, + a frame handler, a client-provided name, and automatic recovery settings. + + + + + Construct a frame handler for a given endpoint. + + Socket factory method. + Timeout in milliseconds. + Represents a TCP-addressable AMQP peer: a host name and port number. + + + + Construct a protocol model atop a given session. + + + + + Retrieve the protocol's API name, used for printing, + configuration properties, IDE integration, Protocols.cs etc. + + + + + Retrieve the protocol's default TCP port. + + + + + Retrieve the protocol's major version number. + + + + + Retrieve the protocol's minor version number. + + + + + Retrieve the protocol's revision (if specified). + + + + Protocol major version (= 0) + + + Protocol minor version (= 9) + + + Protocol revision (= 1) + + + Protocol API name (= AMQP_0_9_1) + + + Default TCP port (= 5672) + + + (= 1) + + + (= 2) + + + (= 3) + + + (= 8) + + + (= 4096) + + + (= 206) + + + (= 200) + + + (= 311) + + + (= 313) + + + (= 320) + + + (= 402) + + + (= 403) + + + (= 404) + + + (= 405) + + + (= 406) + + + (= 501) + + + (= 502) + + + (= 503) + + + (= 504) + + + (= 505) + + + (= 506) + + + (= 530) + + + (= 540) + + + (= 541) + + + Autogenerated type. AMQP specification method "connection.start". + + + + A decoded AMQP method frame. + + + + AMQP methods can be RPC requests, RPC responses, exceptions + (ChannelClose, ConnectionClose), or one-way asynchronous + messages. Currently this information is not recorded in their + type or interface: it is implicit in the way the method is + used, and the way it is defined in the AMQP specification. A + future revision of the RabbitMQ .NET client library may extend + the IMethod interface to represent this information + explicitly. + + + + + + Retrieves the class ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the method ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the name of this method - for debugging use. + + + + Autogenerated type. AMQP specification method "connection.start-ok". + + + Autogenerated type. AMQP specification method "connection.secure". + + + Autogenerated type. AMQP specification method "connection.secure-ok". + + + Autogenerated type. AMQP specification method "connection.tune". + + + Autogenerated type. AMQP specification method "connection.tune-ok". + + + Autogenerated type. AMQP specification method "connection.open". + + + Autogenerated type. AMQP specification method "connection.open-ok". + + + Autogenerated type. AMQP specification method "connection.close". + + + Autogenerated type. AMQP specification method "connection.close-ok". + + + Autogenerated type. AMQP specification method "connection.blocked". + + + Autogenerated type. AMQP specification method "connection.unblocked". + + + Autogenerated type. AMQP specification method "channel.open". + + + Autogenerated type. AMQP specification method "channel.open-ok". + + + Autogenerated type. AMQP specification method "channel.flow". + + + Autogenerated type. AMQP specification method "channel.flow-ok". + + + Autogenerated type. AMQP specification method "channel.close". + + + Autogenerated type. AMQP specification method "channel.close-ok". + + + Autogenerated type. AMQP specification method "exchange.declare". + + + Autogenerated type. AMQP specification method "exchange.declare-ok". + + + Autogenerated type. AMQP specification method "exchange.delete". + + + Autogenerated type. AMQP specification method "exchange.delete-ok". + + + Autogenerated type. AMQP specification method "exchange.bind". + + + Autogenerated type. AMQP specification method "exchange.bind-ok". + + + Autogenerated type. AMQP specification method "exchange.unbind". + + + Autogenerated type. AMQP specification method "exchange.unbind-ok". + + + Autogenerated type. AMQP specification method "queue.declare". + + + Autogenerated type. AMQP specification method "queue.declare-ok". + + + Autogenerated type. AMQP specification method "queue.bind". + + + Autogenerated type. AMQP specification method "queue.bind-ok". + + + Autogenerated type. AMQP specification method "queue.unbind". + + + Autogenerated type. AMQP specification method "queue.unbind-ok". + + + Autogenerated type. AMQP specification method "queue.purge". + + + Autogenerated type. AMQP specification method "queue.purge-ok". + + + Autogenerated type. AMQP specification method "queue.delete". + + + Autogenerated type. AMQP specification method "queue.delete-ok". + + + Autogenerated type. AMQP specification method "basic.qos". + + + Autogenerated type. AMQP specification method "basic.qos-ok". + + + Autogenerated type. AMQP specification method "basic.consume". + + + Autogenerated type. AMQP specification method "basic.consume-ok". + + + Autogenerated type. AMQP specification method "basic.cancel". + + + Autogenerated type. AMQP specification method "basic.cancel-ok". + + + Autogenerated type. AMQP specification method "basic.publish". + + + Autogenerated type. AMQP specification method "basic.return". + + + Autogenerated type. AMQP specification method "basic.deliver". + + + Autogenerated type. AMQP specification method "basic.get". + + + Autogenerated type. AMQP specification method "basic.get-ok". + + + Autogenerated type. AMQP specification method "basic.get-empty". + + + Autogenerated type. AMQP specification method "basic.ack". + + + Autogenerated type. AMQP specification method "basic.reject". + + + Autogenerated type. AMQP specification method "basic.recover-async". + + + Autogenerated type. AMQP specification method "basic.recover". + + + Autogenerated type. AMQP specification method "basic.recover-ok". + + + Autogenerated type. AMQP specification method "basic.nack". + + + Autogenerated type. AMQP specification method "tx.select". + + + Autogenerated type. AMQP specification method "tx.select-ok". + + + Autogenerated type. AMQP specification method "tx.commit". + + + Autogenerated type. AMQP specification method "tx.commit-ok". + + + Autogenerated type. AMQP specification method "tx.rollback". + + + Autogenerated type. AMQP specification method "tx.rollback-ok". + + + Autogenerated type. AMQP specification method "confirm.select". + + + Autogenerated type. AMQP specification method "confirm.select-ok". + + + Autogenerated type. AMQP specification content header properties for content class "basic" + + + + A decoded AMQP content header frame. + + + + + Retrieve the AMQP class ID of this content header. + + + + + Retrieve the AMQP class name of this content header. + + + + + Fill this instance from the given byte buffer stream. + + + + + Retrieve the AMQP class ID of this content header. + + + + + Retrieve the AMQP class name of this content header. + + + + Common AMQP Basic content-class headers interface, + spanning the union of the functionality offered by versions + 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + The specification code generator provides + protocol-version-specific implementations of this interface. To + obtain an implementation of this interface in a + protocol-version-neutral way, use . + + + Each property is readable, writable and clearable: a cleared + property will not be transmitted over the wire. Properties on a + fresh instance are clear by default. + + + + + + Clear the property. + + + + + Clear the property (cluster id is deprecated in AMQP 0-9-1). + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the Type property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present (cluster id is deprecated in AMQP 0-9-1). + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the Type property is present. + + + + + Returns true if the UserId property is present. + + + + Sets to either persistent (2) or non-persistent (1). + + + The numbers 1 and 2 for delivery mode are "magic" in that + they appear in the AMQP 0-8 and 0-9 specifications as part + of the definition of the DeliveryMode Basic-class property, + without being defined as named constants. + + + Calling this method causes to take on a value. + In order to reset to the default empty condition, call . + + + + + + Application Id. + + + + + Intra-cluster routing identifier (cluster id is deprecated in AMQP 0-9-1). + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Application correlation identifier. + + + + + Non-persistent (1) or persistent (2). + + + + + Message expiration specification. + + + + + Message header field table. Is of type . + + + + + Application message Id. + + + + + Sets to either persistent (2) or non-persistent (1). + + + + + Message priority, 0 to 9. + + + + + Destination to reply to. + + + + + Convenience property; parses property using , + and serializes it using . + Returns null if property cannot be parsed by . + + + + + Message timestamp. + + + + + Message type name. + + + + + User Id. + + + + + Clear the property. + + + + + Clear the property (cluster id is deprecated in AMQP 0-9-1). + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the Type property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present (cluster id is deprecated in AMQP 0-9-1). + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the Type property is present. + + + + + Returns true if the UserId property is present. + + + + Sets to either persistent (2) or non-persistent (1). + + + The numbers 1 and 2 for delivery mode are "magic" in that + they appear in the AMQP 0-8 and 0-9 specifications as part + of the definition of the DeliveryMode Basic-class property, + without being defined as named constants. + + + Calling this method causes to take on a value. + In order to reset to the default empty condition, call . + + + + + + Application Id. + + + + + Intra-cluster routing identifier (cluster id is deprecated in AMQP 0-9-1). + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Application correlation identifier. + + + + + Non-persistent (1) or persistent (2). + + + + + Message expiration specification. + + + + + Message header field table. Is of type . + + + + + Application message Id. + + + + + Sets to either persistent (2) or non-persistent (1). + + + + + Message priority, 0 to 9. + + + + + Destination to reply to. + + + + + Convenience property; parses property using , + and serializes it using . + Returns null if property cannot be parsed by . + + + + + Message timestamp. + + + + + Message type name. + + + + + User Id. + + + + Autogenerated type. Private implementation class - do not use directly. + + + + Retrieves the class ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the method ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the name of this method - for debugging use. + + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Not part of the public API. Extension of IModel to + include utilities and connection-setup routines needed by the + implementation side. + + This interface is used by the API autogeneration + process. The AMQP XML specifications are read by the spec + compilation tool, and after the basic method interface and + implementation classes are generated, this interface is + scanned, and a spec-version-specific implementation is + autogenerated. Annotations are used on certain methods, return + types, and parameters, to customise the details of the + autogeneration process. + + + + + + + Common AMQP model, spanning the union of the + functionality offered by versions 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + Extends the interface, so that the "using" + statement can be used to scope the lifetime of a channel when appropriate. + + + + + Abort this session. + + + If the session is already closed (or closing), then this + method does nothing but wait for the in-progress close + operation to complete. This method will not return to the + caller until the shutdown is complete. + In comparison to normal method, will not throw + or or any other during closing model. + + + + + Abort this session. + + + The method behaves in the same way as , with the only + difference that the model is closed with the given model close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the model + + + + + + (Spec method) Acknowledge one or more delivered message(s). + + + + + Delete a Basic content-class consumer. + + + + Start a Basic content-class consumer. + + The consumer is started with noAck=false (i.e. BasicAck is required), + an empty consumer tag (i.e. the server creates and returns a fresh consumer tag), + noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + The consumer is started with + an empty consumer tag (i.e. the server creates and returns a fresh consumer tag), + noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + The consumer is started with noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + + + (Spec method) Retrieve an individual message, if + one is available; returns null if the server answers that + no messages are currently available. See also . + + + + Reject one or more delivered message(s). + + + + (Spec method) Convenience overload of BasicPublish. + + + The publication occurs with mandatory=false and immediate=false. + + + + + (Spec method) Convenience overload of BasicPublish. + + + The publication occurs with mandatory=false + + + + + (Spec method) Convenience overload of BasicPublish. + + + + + (Spec method) Configures QoS parameters of the Basic content-class. + + + + + (Spec method). + + + + + (Spec method). + + + + (Spec method) Reject a delivered message. + + + Close this session. + + If the session is already closed (or closing), then this + method does nothing but wait for the in-progress close + operation to complete. This method will not return to the + caller until the shutdown is complete. + + + + Close this session. + + The method behaves in the same way as Close(), with the only + difference that the model is closed with the given model + close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the model + + + + + + Enable publisher acknowledgements. + + + + + Construct a completely empty content header for use with the Basic content class. + + + + + (Extension method) Bind an exchange to an exchange. + + + + + (Extension method) Bind an exchange to an exchange. + + + + + Like ExchangeBind but sets nowait to true. + + + + (Spec method) Declare an exchange. + + The exchange is declared non-passive and non-internal. + The "nowait" option is not exercised. + + + + + (Spec method) Declare an exchange. + + + The exchange is declared non-passive, non-autodelete, and + non-internal, with no arguments. The "nowait" option is not exercised. + + + + + (Spec method) Declare an exchange. + + + The exchange is declared non-passive, non-durable, non-autodelete, and + non-internal, with no arguments. The "nowait" option is not exercised. + + + + + Same as ExchangeDeclare but sets nowait to true and returns void (as there + will be no response from the server). + + + + + (Spec method) Declare an exchange. + + + The exchange is declared passive. + + + + + (Spec method) Delete an exchange. + + + + (Spec method) Delete an exchange. + + The exchange is deleted regardless of any queue bindings. + + + + + Like ExchangeDelete but sets nowait to true. + + + + + (Extension method) Unbind an exchange from an exchange. + + + + + (Extension method) Unbind an exchange from an exchange. + + + + + Like ExchangeUnbind but sets nowait to true. + + + + + (Spec method) Bind a queue to an exchange. + + + + (Spec method) Bind a queue to an exchange. + + + Same as QueueBind but sets nowait parameter to true. + + + (Spec method) Declare a queue. + + The queue is declared non-passive, non-durable, + but exclusive and autodelete, with no arguments. The + server autogenerates a name for the queue - the generated name is the return value of this method. + + + + (Spec method) Declare a queue. + + + + Same as QueueDeclare but sets nowait to true and returns void (as there + will be no response from the server). + + + + Declare a queue passively. + + The queue is declared passive, non-durable, + non-exclusive, and non-autodelete, with no arguments. + The queue is declared passively; i.e. only check if it exists. + + + + + Returns the number of messages in a queue ready to be delivered + to consumers. This method assumes the queue exists. If it doesn't, + an exception will be closed with an exception. + + The name of the queue + + + + Returns the number of consumers on a queue. + This method assumes the queue exists. If it doesn't, + an exception will be closed with an exception. + + The name of the queue + + + + (Spec method) Delete a queue. + + + Returns the number of messages purged during queue deletion. + uint.MaxValue. + + + + + (Spec method) Delete a queue. + + + Returns the number of messages purged during queue deletion. + + + + + Same as QueueDelete but sets nowait parameter to true + and returns void (as there will be no response from the server) + + + + + (Spec method) Purge a queue of messages. + + + Returns the number of messages purged. + + + + + (Spec method) Unbind a queue from an exchange. + + + + + (Spec method) Commit this session's active TX transaction. + + + + + (Spec method) Roll back this session's active TX transaction. + + + + + (Spec method) Enable TX mode for this session. + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + True if no nacks were received within the timeout, otherwise false. + How long to wait (at most) before returning + whether or not any nacks were returned. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + True if no nacks were received within the timeout, otherwise false. + How long to wait (at most) before returning + whether or not any nacks were returned. + + True if the method returned because + the timeout elapsed, not because all messages were ack'd or at least one nack'd. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been ack'd by the broker. If a nack is received, throws an + OperationInterrupedException exception immediately. + + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been ack'd by the broker. If a nack is received or the timeout + elapses, throws an OperationInterrupedException exception immediately. + + + + + Channel number, unique per connections. + + + + + Returns null if the session is still in a state where it can be used, + or the cause of its closure otherwise. + + + + Signalled when an unexpected message is delivered + + Under certain circumstances it is possible for a channel to receive a + message delivery which does not match any consumer which is currently + set up via basicConsume(). This will occur after the following sequence + of events: + + ctag = basicConsume(queue, consumer); // i.e. with explicit acks + // some deliveries take place but are not acked + basicCancel(ctag); + basicRecover(false); + + Since requeue is specified to be false in the basicRecover, the spec + states that the message must be redelivered to "the original recipient" + - i.e. the same channel / consumer-tag. But the consumer is no longer + active. + + In these circumstances, you can register a default consumer to handle + such deliveries. If no default consumer is registered an + InvalidOperationException will be thrown when such a delivery arrives. + + Most people will not need to use this. + + + + Returns true if the model is no longer in a state where it can be used. + + + + + Returns true if the model is still in a state where it can be used. + Identical to checking if equals null. + + + + When in confirm mode, return the sequence number of the next message to be published. + + + + + Signalled when a Basic.Ack command arrives from the broker. + + + + + Signalled when a Basic.Nack command arrives from the broker. + + + + + All messages received before this fires that haven't been ack'ed will be redelivered. + All messages received afterwards won't be. + + + Handlers for this event are invoked by the connection thread. + It is sometimes useful to allow that thread to know that a recover-ok + has been received, rather than the thread that invoked . + + + + + Signalled when a Basic.Return command arrives from the broker. + + + + + Signalled when an exception occurs in a callback invoked by the model. + + Examples of cases where this event will be signalled + include exceptions thrown in methods, or + exceptions thrown in delegates etc. + + + + + Notifies the destruction of the model. + + + If the model is already destroyed at the time an event + handler is added to this event, the event handler will be fired immediately. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + Sends a Connection.TuneOk. Used during connection + initialisation. + + + Handle incoming Basic.Ack methods. Signals a + BasicAckEvent. + + + Handle incoming Basic.CancelOk methods. + + + Handle incoming Basic.ConsumeOk methods. + + + Handle incoming Basic.Deliver methods. Dispatches + to waiting consumers. + + + Handle incoming Basic.GetEmpty methods. Routes the + information to a waiting Basic.Get continuation. + + Note that the clusterId field is ignored, as in the + specification it notes that it is "deprecated pending + review". + + + + Handle incoming Basic.GetOk methods. Routes the + information to a waiting Basic.Get continuation. + + + Handle incoming Basic.Nack methods. Signals a + BasicNackEvent. + + + Handle incoming Basic.RecoverOk methods + received in reply to Basic.Recover. + + + + Handle incoming Basic.Return methods. Signals a + BasicReturnEvent. + + + Handle an incoming Channel.Close. Shuts down the + session and model. + + + Handle an incoming Channel.CloseOk. + + + Handle incoming Channel.Flow methods. Either + stops or resumes sending the methods that have content. + + + Handle an incoming Connection.Blocked. + + + Handle an incoming Connection.Close. Shuts down the + connection and all sessions and models. + + + Handle an incoming Connection.OpenOk. + + + Handle incoming Connection.Secure + methods. + + + Handle an incoming Connection.Start. Used during + connection initialisation. + + + Handle incoming Connection.Tune + methods. + + + Handle an incominga Connection.Unblocked. + + + Handle incoming Queue.DeclareOk methods. Routes the + information to a waiting Queue.DeclareOk continuation. + + + Used to send a Basic.Cancel method. The public + consume API calls this while also managing internal + datastructures. + + + Used to send a Basic.Consume method. The public + consume API calls this while also managing internal + datastructures. + + + Used to send a Basic.Get. Basic.Get is a special + case, since it can result in a Basic.GetOk or a + Basic.GetEmpty, so this level of manual control is + required. + + + Used to send a Basic.Publish method. Called by the + public publish method after potential null-reference issues + have been rectified. + + + Used to send a Channel.Close. Called during + session shutdown. + + + Used to send a Channel.CloseOk. Called during + session shutdown. + + + Used to send a Channel.FlowOk. Confirms that + Channel.Flow from the broker was processed. + + + Used to send a Channel.Open. Called during session + initialisation. + + + Used to send a Confirm.Select method. The public + confirm API calls this while also managing internal + datastructures. + + + Used to send a Connection.Close. Called during + connection shutdown. + + + Used to send a Connection.CloseOk. Called during + connection shutdown. + + + Used to send a Connection.Open. Called during + connection startup. + + + Used to send a Connection.SecureOk. Again, this is + special, like Basic.Get. + + + Used to send a Connection.StartOk. This is + special, like Basic.Get. + + + Used to send a Exchange.Bind method. Called by the + public bind method. + + + + Used to send a Exchange.Declare method. Called by the + public declare method. + + + + Used to send a Exchange.Delete method. Called by the + public delete method. + + + + Used to send a Exchange.Unbind method. Called by the + public unbind method. + + + + Used to send a Queue.Bind method. Called by the + public bind method. + + + Used to send a Queue.Declare method. Called by the + public declare method. + + + Used to send a Queue.Delete method. Called by the + public delete method. + + + Used to send a Queue.Purge method. Called by the + public purge method. + + + + A marker interface for entities that are recoverable (currently connection or channel). + + + + Only used to kick-start a connection open + sequence. See + + + Broadcasts notification of the final shutdown of the model. + + + Do not call anywhere other than at the end of OnSessionShutdown. + + + Must not be called when m_closeReason == null, because + otherwise there's a window when a new continuation could be + being enqueued at the same time as we're broadcasting the + shutdown event. See the definition of Enqueue() above. + + + + + Handle incoming Connection.Tune + methods. + + + + Represents a TCP-addressable AMQP peer: a host name and port number. + + + Some of the constructors take, as a convenience, a System.Uri + instance representing an AMQP server address. The use of Uri + here is not standardised - Uri is simply a convenient + container for internet-address-like components. In particular, + the Uri "Scheme" property is ignored: only the "Host" and + "Port" properties are extracted. + + + + + Default Amqp ssl port. + + + + + Indicates that the default port for the protocol should be used. + + + + + Creates a new instance of the . + + Hostname. + Port number. If the port number is -1, the default port number will be used. + Ssl option. + + + + Creates a new instance of the . + + Hostname. + Port number. If the port number is -1, the default port number will be used. + + + + Construct an AmqpTcpEndpoint with "localhost" as the hostname, and using the default port. + + + + + Creates a new instance of the with the given Uri and ssl options. + + + Please see the class overview documentation for information about the Uri format in use. + + + + + Creates a new instance of the with the given Uri. + + + Please see the class overview documentation for information about the Uri format in use. + + + + + Clones the endpoint. + + A copy with the same hostname, port, and TLS settings + + + + Clones the endpoint using the provided hostname. + + Hostname to use + A copy with the provided hostname and port/TLS settings of this endpoint + + + + Construct an instance from a protocol and an address in "hostname:port" format. + + + If the address string passed in contains ":", it is split + into a hostname and a port-number part. Otherwise, the + entire string is used as the hostname, and the port-number + is set to -1 (meaning the default number for the protocol + variant specified). + Hostnames provided as IPv6 must appear in square brackets ([]). + + + + + Splits the passed-in string on ",", and passes the substrings to . + + + Accepts a string of the form "hostname:port, + hostname:port, ...", where the ":port" pieces are + optional, and returns a corresponding array of s. + + + + + Compares this instance by value (protocol, hostname, port) against another instance. + + + + + Implementation of hash code depending on protocol, hostname and port, + to line up with the implementation of . + + + + + Returns a URI-like string of the form amqp-PROTOCOL://HOSTNAME:PORTNUMBER. + + + This method is intended mainly for debugging and logging use. + + + + + Retrieve or set the hostname of this . + + + + Retrieve or set the port number of this + AmqpTcpEndpoint. A port number of -1 causes the default + port number. + + + + Retrieve IProtocol of this . + + + + + Retrieve the SSL options for this AmqpTcpEndpoint. If not set, null is returned. + + + + + Structure holding an AMQP timestamp, a posix 64-bit time_t. + + + When converting between an AmqpTimestamp and a System.DateTime, + be aware of the effect of your local timezone. In particular, + different versions of the .NET framework assume different + defaults. + + + We have chosen a signed 64-bit time_t here, since the AMQP + specification through versions 0-9 is silent on whether + timestamps are signed or unsigned. + + + + + + Construct an . + + Unix time. + + + + Provides a debugger-friendly display. + + + + + Unix time. + + + + Represents a version of the AMQP specification. + + + Vendor-specific variants of particular official specification + versions exist: this class simply represents the AMQP + specification version, and does not try to represent + information about any custom variations involved. + + + AMQP version 0-8 peers sometimes advertise themselves as + version 8-0: for this reason, this class's constructor + special-cases 8-0, rewriting it at construction time to be 0-8 instead. + + + + + + Construct an from major and minor version numbers. + + + Converts major=8 and minor=0 into major=0 and minor=8. Please see the class comment. + + + + + Implement value-equality comparison. + + + + + Implement hashing as for value-equality. + + + + + Format appropriately for display. + + + The specification currently uses "MAJOR-MINOR" as a display format. + + + + + The AMQP specification major version number. + + + + + The AMQP specification minor version number. + + + + + A pluggable authentication mechanism. + + + + + Handle one round of challenge-response. + + + + + Return a new authentication mechanism implementation. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + Represents Basic.GetOk responses from the server. + + Basic.Get either returns an instance of this class, or null if a Basic.GetEmpty was received. + + + + + Sets the new instance's properties from the arguments passed in. + + Delivery tag for the message. + Redelivered flag for the message + The exchange this message was published to. + Routing key with which the message was published. + The number of messages pending on the queue, excluding the message being delivered. + The Basic-class content header properties for the message. + + + + + Retrieves the Basic-class content header properties for this message. + + + + + Retrieves the body of this message. + + + + + Retrieve the delivery tag for this message. See also . + + + + + Retrieve the exchange this message was published to. + + + + + Retrieve the number of messages pending on the queue, excluding the message being delivered. + + + Note that this figure is indicative, not reliable, and can + change arbitrarily as messages are added to the queue and removed by other clients. + + + + + Retrieve the redelivered flag for this message. + + + + + Retrieve the routing key with which this message was published. + + + + Wrapper for a byte[]. May appear as values read from + and written to AMQP field tables. + + + The sole reason for the existence of this class is to permit + encoding of byte[] as 'x' in AMQP field tables, an extension + to the specification that is part of the tentative JMS mapping + implemented by QPid. + + + Instances of this object may be found as values held in + IDictionary instances returned from + RabbitMQ.Client.Impl.WireFormatting.ReadTable, e.g. as part of + IBasicProperties.Headers tables. Likewise, instances may be + set as values in an IDictionary table to be encoded by + RabbitMQ.Client.Impl.WireFormatting.WriteTable. + + + When an instance of this class is encoded/decoded, the type + tag 'x' is used in the on-the-wire representation. The AMQP + standard type tag 'S' is decoded to a raw byte[], and a raw + byte[] is encoded as 'S'. Instances of System.String are + converted to a UTF-8 binary representation, and then encoded + using tag 'S'. In order to force the use of tag 'x', instances + of this class must be used. + + + + + + Creates a new instance of the with null for its Bytes property. + + + + + Creates a new instance of the . + + The wrapped byte array, as decoded or as to be encoded. + + + + The wrapped byte array, as decoded or as to be encoded. + + + + Main entry point to the RabbitMQ .NET AMQP client + API. Constructs instances. + + + A simple example of connecting to a broker: + + + IConnectionFactory factory = new ConnectionFactory(); + // + // The next six lines are optional: + factory.UserName = ConnectionFactory.DefaultUser; + factory.Password = ConnectionFactory.DefaultPass; + factory.VirtualHost = ConnectionFactory.DefaultVHost; + factory.HostName = hostName; + factory.Port = AmqpTcpEndpoint.UseDefaultPort; + // + IConnection conn = factory.CreateConnection(); + // + IModel ch = conn.CreateModel(); + // + // ... use ch's IModel methods ... + // + ch.Close(Constants.ReplySuccess, "Closing the channel"); + conn.Close(Constants.ReplySuccess, "Closing the connection"); + + + The same example, written more compactly with AMQP URIs: + + + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = "amqp://localhost"; + IConnection conn = factory.CreateConnection(); + ... + + + Please see also the API overview and tutorial in the User Guide. + + + Note that the Uri property takes a string representation of an + AMQP URI. Omitted URI parts will take default values. The + host part of the URI cannot be omitted and URIs of the form + "amqp://foo/" (note the trailling slash) also represent the + default virtual host. The latter issue means that virtual + hosts with an empty name are not addressable. + + + + Set custom socket options by providing a SocketFactory. + + + + + Creates a new instance of the . + + Specifies the addressing scheme. + New instance of a . + + + + Given a list of mechanism names supported by the server, select a preferred mechanism, + or null if we have none in common. + + + + + Create a connection to the specified endpoint. + + + + + Create a connection to the specified endpoint. + + /// Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + + Connects to the first reachable hostname from the list. + + List of host names to use + + + + + Connects to the first reachable hostname from the list. + + List of host names to use + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + + Dictionary of client properties to be sent to the server. + + + + + Password to use when authenticating to the server. + + + + + Maximum channel number to ask for. + + + + + Frame-max parameter to ask for (in bytes). + + + + + Heartbeat setting to request (in seconds). + + + + + When set to true, background threads will be used for I/O and heartbeats. + + + + + Username to use when authenticating to the server. + + + + + Virtual host to access during this connection. + + + + + Advanced option. + + What task scheduler should consumer dispatcher use. + + + + + Amount of time protocol handshake operations are allowed to take before + timing out. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + Default value for the desired maximum channel number, with zero meaning unlimited (value: 0). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default value for connection attempt timeout, in milliseconds. + + + + + Default value for the desired maximum frame size, with zero meaning unlimited (value: 0). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default value for desired heartbeat interval, in seconds, with zero meaning none (value: 60). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default password (value: "guest"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default user name (value: "guest"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default virtual host (value: "/"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default SASL auth mechanisms to use. + + + + + SASL auth mechanisms to use. + + + + + Set to true to enable automatic connection recovery. + + + + + Used to select next hostname to try when performing + connection recovery (re-connecting). Is not used for + non-recovering connections. + + + + The host to connect to. + + + + Amount of time client will wait for before re-trying to recover connection. + + + + + The port to connect on. + indicates the default for the protocol should be used. + + + + + Protocol used, only AMQP 0-9-1 is supported in modern versions. + + + + + Timeout setting for connection attempts (in milliseconds). + + + + + Timeout setting for socket read operations (in milliseconds). + + + + + Timeout setting for socket write operations (in milliseconds). + + + + + Ssl options setting. + + + + + Set to true to make automatic connection recovery also recover topology (exchanges, queues, bindings, etc). + + + + + Construct a fresh instance, with all fields set to their respective defaults. + + + + + Given a list of mechanism names supported by the server, select a preferred mechanism, + or null if we have none in common. + + + + + Create a connection to the specified endpoint. + + + When the configured hostname was not reachable. + + + + + Create a connection to the specified endpoint. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + When the configured hostname was not reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of hostnames to use for the initial + connection and recovery. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of hostnames to use for the initial + connection and recovery. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of endpoints to use for the initial + connection and recovery. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of endpoints to use for the initial + connection and recovery. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + Open connection + + When no hostname was reachable. + + + + + Unescape a string, protecting '+'. + + + + + Amount of time protocol handshake operations are allowed to take before + timing out. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + Task scheduler connections created by this factory will use when + dispatching consumer operations, such as message deliveries. + + + + + Connection endpoint. + + + + + Set connection parameters using the amqp or amqps scheme. + + + + + Set connection parameters using the amqp or amqps scheme. + + + + + Dictionary of client properties to be sent to the server. + + + + + Password to use when authenticating to the server. + + + + + Maximum channel number to ask for. + + + + + Frame-max parameter to ask for (in bytes). + + + + + Heartbeat timeout to use when negotiating with the server (in seconds). + + + + + When set to true, background thread will be used for the I/O loop. + + + + + Username to use when authenticating to the server. + + + + + Virtual host to access during this connection. + + + + + Useful default/base implementation of . + Subclass and override in application code. + + + Note that the "Handle*" methods run in the connection's thread! + Consider using , which exposes + events that can be subscribed to consumer messages. + + + + Consumer interface. Used to + receive messages from a queue by subscription. + + + See IModel.BasicConsume, IModel.BasicCancel. + + + Note that the "Handle*" methods run in the connection's + thread! Consider using QueueingBasicConsumer, which uses a + SharedQueue instance to safely pass received messages across + to user threads. + + + + + + Called when the consumer is cancelled for reasons other than by a basicCancel: + e.g. the queue has been deleted (either by this channel or by any other channel). + See for notification of consumer cancellation due to basicCancel + + Consumer tag this consumer is registered. + + + + Called upon successful deregistration of the consumer from the broker. + + Consumer tag this consumer is registered. + + + + Called upon successful registration of the consumer with the broker. + + Consumer tag this consumer is registered. + + + + Called each time a message arrives for this consumer. + + + Does nothing with the passed in information. + Note that in particular, some delivered messages may require acknowledgement via . + The implementation of this method in this class does NOT acknowledge such messages. + + + + + Called when the model shuts down. + + Common AMQP model. + Information about the reason why a particular model, session, or connection was destroyed. + + + + Retrieve the this consumer is associated with, + for use in acknowledging received messages, for instance. + + + + + Signalled when the consumer gets cancelled. + + + + + Creates a new instance of an . + + + + + Constructor which sets the Model property to the given value. + + Common AMQP model. + + + + Called when the consumer is cancelled for reasons other than by a basicCancel: + e.g. the queue has been deleted (either by this channel or by any other channel). + See for notification of consumer cancellation due to basicCancel + + Consumer tag this consumer is registered. + + + + Called upon successful deregistration of the consumer from the broker. + + Consumer tag this consumer is registered. + + + + Called upon successful registration of the consumer with the broker. + + Consumer tag this consumer is registered. + + + + Called each time a message arrives for this consumer. + + + Does nothing with the passed in information. + Note that in particular, some delivered messages may require acknowledgement via . + The implementation of this method in this class does NOT acknowledge such messages. + + + + + Called when the model shuts down. + + Common AMQP model. + Information about the reason why a particular model, session, or connection was destroyed. + + + + Default implementation - overridable in subclasses. + + This default implementation simply sets the + property to false, and takes no further action. + + + + + Retrieve the consumer tag this consumer is registered as; to be used when discussing this consumer + with the server, for instance with . + + + + + Returns true while the consumer is registered and expecting deliveries from the broker. + + + + + If our shuts down, this property will contain a description of the reason for the + shutdown. Otherwise it will contain null. See . + + + + + Signalled when the consumer gets cancelled. + + + + + Retrieve the this consumer is associated with, + for use in acknowledging received messages, for instance. + + + + + Convenience class providing compile-time names for standard headers. + + + Use the static members of this class as headers for the + arguments for Queue and Exchange declaration or Consumer creation. + The broker may be extended with additional + headers that do not appear in this class. + + + + + x-max-priority header + + + + + x-max-length header + + + + + x-max-length-bytes header + + + + + x-dead-letter-exchange header + + + + + x-dead-letter-routing-key header + + + + + x-message-ttl header + + + + + x-expires header + + + + + alternate-exchange header + + + + + x-priority header + + + + + Convenience class providing compile-time names for standard exchange types. + + + Use the static members of this class as values for the + "exchangeType" arguments for IModel methods such as + ExchangeDeclare. The broker may be extended with additional + exchange types that do not appear in this class. + + + + + Exchange type used for AMQP direct exchanges. + + + + + Exchange type used for AMQP fanout exchanges. + + + + + Exchange type used for AMQP headers exchanges. + + + + + Exchange type used for AMQP topic exchanges. + + + + + Retrieve a collection containing all standard exchange types. + + + + + Handle one round of challenge-response. + + + + + Return a new authentication mechanism implementation. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Main interface to an AMQP connection. + + + + Instances of are used to create fresh + sessions/channels. The class is used to + construct instances. + Please see the documentation for ConnectionFactory for an example of usage. + Alternatively, an API tutorial can be found in the User Guide. + + + Extends the interface, so that the "using" + statement can be used to scope the lifetime of a channel when + appropriate. + + + + + + Common interface for network (TCP/IP) connection classes. + + + + + Local port. + + + + + Remote port. + + + + + Abort this connection and all its channels. + + + Note that all active channels, sessions, and models will be closed if this method is called. + In comparison to normal method, will not throw + or during closing connection. + This method waits infinitely for the in-progress close operation to complete. + + + + + Abort this connection and all its channels. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the connection + + + + + + Abort this connection and all its channels and wait with a + timeout for all the in-progress close operations to complete. + + + This method, behaves in a similar way as method with the + only difference that it explictly specifies the timeout given + for all the in-progress close operations to complete. + If timeout is reached and the close operations haven't finished, then socket is forced to close. + + To wait infinitely for the close operations to complete use . + + + + + + Abort this connection and all its channels and wait with a + timeout for all the in-progress close operations to complete. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Close this connection and all its channels. + + + Note that all active channels, sessions, and models will be + closed if this method is called. It will wait for the in-progress + close operation to complete. This method will not return to the caller + until the shutdown is complete. If the connection is already closed + (or closing), then this method will throw . + It can also throw when socket was closed unexpectedly. + + + + + Close this connection and all its channels. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Close this connection and all its channels + and wait with a timeout for all the in-progress close operations to complete. + + + Note that all active channels, sessions, and models will be + closed if this method is called. It will wait for the in-progress + close operation to complete with a timeout. If the connection is + already closed (or closing), then this method will throw . + It can also throw when socket was closed unexpectedly. + If timeout is reached and the close operations haven't finished, then socket is forced to close. + + To wait infinitely for the close operations to complete use . + + + + + + Close this connection and all its channels + and wait with a timeout for all the in-progress close operations to complete. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Create and return a fresh channel, session, and model. + + + + + Handle incoming Connection.Blocked methods. + + + + + Handle incoming Connection.Unblocked methods. + + + + + If true, will close the whole connection as soon as there are no channels open on it; + if false, manual connection closure will be required. + + + DON'T set AutoClose to true before opening the first + channel, because the connection will be immediately closed if you do! + + + + + The maximum channel number this connection supports (0 if unlimited). + Usable channel numbers range from 1 to this number, inclusive. + + + + + A copy of the client properties that has been sent to the server. + + + + + Returns null if the connection is still in a state + where it can be used, or the cause of its closure otherwise. + + + + Applications should use the ConnectionShutdown event to + avoid race conditions. The scenario to avoid is checking + , seeing it is null (meaning the + was available for use at the time of the check), and + interpreting this mistakenly as a guarantee that the + will remain usable for a time. Instead, the + operation of interest should simply be attempted: if the + is not in a usable state, an exception will be + thrown (most likely , but may + vary depending on the particular operation being attempted). + + + + + + Retrieve the endpoint this connection is connected to. + + + + + The maximum frame size this connection supports (0 if unlimited). + + + + + The current heartbeat setting for this connection (0 for disabled), in seconds. + + + + + Returns true if the connection is still in a state where it can be used. + Identical to checking if equal null. + + + + + Returns the known hosts that came back from the + broker in the connection.open-ok method at connection + startup time. Null until the connection is completely open and ready for use. + + + + + The this connection is using to communicate with its peer. + + + + + A dictionary of the server properties sent by the server while establishing the connection. + This typically includes the product name and version of the server. + + + + + Returns the list of objects that contain information + about any errors reported while closing the connection in the order they appeared + + + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + Signalled when an exception occurs in a callback invoked by the connection. + + + This event is signalled when a ConnectionShutdown handler + throws an exception. If, in future, more events appear on + , then this event will be signalled whenever one + of those event handlers throws an exception, as well. + + + + + Raised when the connection is destroyed. + + + If the connection is already destroyed at the time an + event handler is added to this event, the event handler + will be fired immediately. + + + + + Picks a hostname from a list of options that should be used + by . + + + + + + + + Common AMQP Stream content-class headers interface, + spanning the union of the functionality offered by versions 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + + The specification code generator provides + protocol-version-specific implementations of this interface. To + obtain an implementation of this interface in a + protocol-version-neutral way, use IModel.CreateStreamProperties(). + + + Each property is readable, writable and clearable: a cleared + property will not be transmitted over the wire. Properties on a fresh instance are clear by default. + + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Message header field table. + + + + + Message priority, 0 to 9. + + + + + Message timestamp. + + + + + Wrapper interface for standard TCP-client. Provides socket for socket frame handler class. + + Contains all methods that are currenty in use in rabbitmq client. + + + + Return a new authentication mechanism implementation. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Provides access to the supported implementations. + + + + + Protocol version 0-9-1 as modified by Pivotal. + + + + + Retrieve the current default protocol variant (currently AMQP_0_9_1). + + + + + Container for an exchange name, exchange type and + routing key, usable as the target address of a message to be published. + + + + The syntax used for the external representation of instances + of this class is compatible with QPid's "Reply-To" field + pseudo-URI format. The pseudo-URI format is + (exchange-type)://(exchange-name)/(routing-key), where + exchange-type is one of the permitted exchange type names (see + class ExchangeType), exchange-name must be present but may be + empty, and routing-key must be present but may be empty. + + + The syntax is as it is solely for compatibility with QPid's + existing usage of the ReplyTo field; the AMQP specifications + 0-8 and 0-9 do not define the format of the field, and do not + define any format for the triple (exchange name, exchange + type, routing key) that could be used instead. Please see also + the way class RabbitMQ.Client.MessagePatterns.SimpleRpcServer + uses the ReplyTo field. + + + + + + Regular expression used to extract the exchange-type, + exchange-name and routing-key from a string. + + + + + Creates a new instance of the . + + Exchange type. + Exchange name. + Routing key. + + + + Parse a out of the given string, + using the regex. + + + + + Reconstruct the "uri" from its constituents. + + + + + Retrieve the exchange name. + + + + + Retrieve the exchange type string. + + + + + Retrieve the routing key. + + + + + Represents Queue info. + + + + + Creates a new instance of the . + + Queue name. + Message count. + Consumer count. + + + + Consumer count. + + + + + Message count. + + + + + Queue name. + + + + + A implementation that + uses a to buffer incoming deliveries. + + + + Received messages are placed in the SharedQueue as instances + of . + + + Note that messages taken from the SharedQueue may need + acknowledging with . + + + When the consumer is closed, through BasicCancel or through + the shutdown of the underlying or , + the method is called, which causes any + Enqueue() operations, and Dequeue() operations when the queue + is empty, to throw EndOfStreamException (see the comment for ). + + + The following is a simple example of the usage of this class: + + + IModel channel = ...; + QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); + channel.BasicConsume(queueName, null, consumer); + + // At this point, messages will be being asynchronously delivered, + // and will be queueing up in consumer.Queue. + + while (true) { + try { + BasicDeliverEventArgs e = (BasicDeliverEventArgs) consumer.Queue.Dequeue(); + // ... handle the delivery ... + channel.BasicAck(e.DeliveryTag, false); + } catch (EndOfStreamException ex) { + // The consumer was cancelled, the model closed, or the + // connection went away. + break; + } + } + + + + + + Creates a fresh , + initialising the property to null + and the property to a fresh . + + + + + Creates a fresh , with + set to the argument, and set to a fresh . + + + + + Creates a fresh , + initialising the + and properties to the given values. + + + + + Overrides 's implementation, + building a instance and placing it in the Queue. + + + + + Overrides 's OnCancel implementation, + extending it to call the Close() method of the . + + + + + Retrieves the that messages arrive on. + + + + + Information about the reason why a particular model, session, or connection was destroyed. + + + The and properties should be used to determine the originator of the shutdown event. + + + + + Construct a with the given parameters and + 0 for and . + + + + + Construct a with the given parameters. + + + + + Override ToString to be useful for debugging. + + + + + Object causing the shutdown, or null if none. + + + + + AMQP content-class ID, or 0 if none. + + + + + Returns the source of the shutdown event: either the application, the library, or the remote peer. + + + + + AMQP method ID within a content-class, or 0 if none. + + + + + One of the standardised AMQP reason codes. See RabbitMQ.Client.Framing.*.Constants. + + + + + Informative human-readable reason text. + + + + + Describes the source of a shutdown event. + + + + + The shutdown event originated from the application using the RabbitMQ .NET client library. + + + + + The shutdown event originated from the RabbitMQ .NET client library itself. + + + Shutdowns with this ShutdownInitiator code may appear if, + for example, an internal error is detected by the client, + or if the server sends a syntactically invalid + frame. Another potential use is on IConnection AutoClose. + + + + + The shutdown event originated from the remote AMQP peer. + + + A valid received connection.close or channel.close event + will manifest as a shutdown with this ShutdownInitiator. + + + + + Single entry object in the shutdown report that encapsulates description + of the error which occured during shutdown. + + + + + Description provided in the error. + + + + + object that occured during shutdown, or null if unspecified. + + + + + Represents an which does the actual heavy lifting to set up an SSL connection, + using the config options in an to make things cleaner. + + + + + Upgrade a Tcp stream to an Ssl stream using the SSL options provided. + + + + + Represents a configurable SSL option, used in setting up an SSL connection. + + + + + Constructs an SslOption specifying both the server cannonical name and the client's certificate path. + + + + + Constructs an with no parameters set. + + + + + Retrieve or set the set of ssl policy errors that are deemed acceptable. + + + + + Retrieve or set the path to client certificate. + + + + + Retrieve or set the path to client certificate. + + + + + An optional client specified SSL certificate selection callback. If this is not specified, + the first valid certificate found will be used. + + + + + An optional client specified SSL certificate validation callback. If this is not specified, + the default callback will be used in conjunction with the property to + determine if the remote server certificate is valid. + + + + + Retrieve or set the X509CertificateCollection containing the client certificate. + If no collection is set, the client will attempt to load one from the specified . + + + + + Flag specifying if Ssl should indeed be used. + + + + + Retrieve or set server's Canonical Name. + This MUST match the CN on the Certificate else the SSL connection will fail. + + + + + Retrieve or set the Ssl protocol version. + + + + + Framework for constructing various types of AMQP. Basic-class application messages. + + + + + Interface for constructing application messages. + + + Subinterfaces provide specialized data-writing methods. This + base interface deals with the lowest common denominator: + bytes, with no special encodings for higher-level objects. + + + + + Finish and retrieve the content body for transmission. + + + + + Finish and retrieve the content header for transmission. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Write a single byte into the message body, without encoding or interpretation. + + + + + Write a byte array into the message body, without encoding or interpretation. + + + + + Write a section of a byte array into the message body, without encoding or interpretation. + + + + + Retrieve the being used to construct the message body. + + + + + Retrieves the dictionary that will be used to construct the message header table. + It is of type . + + + + + By default, new instances of BasicMessageBuilder and its subclasses will have this much initial buffer space. + + + + + Construct an instance ready for writing. + + + The is used for the initial accumulator buffer size. + + + + + Construct an instance ready for writing. + + + + + Finish and retrieve the content body for transmission. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Write a single byte into the message body, without encoding or interpretation. + + + + + Write a byte array into the message body, without encoding or interpretation. + + + + + Write a section of a byte array into the message body, without encoding or interpretation. + + + + + Retrieve the associated with this instance. + + + + + Retrieve this instance's writing to BodyStream. + + + If no instance exists, one is created, + pointing at the beginning of the accumulator. If one + already exists, the existing instance is returned. The + instance is not reset. + + + + + Retrieve the being used to construct the message body. + + + + + Retrieves the dictionary that will be used to construct the message header table. + It is of type . + + + + + Framework for analyzing various types of AMQP Basic-class application messages. + + + + + Interface for analyzing application messages. + + + Subinterfaces provide specialized data-reading methods. This + base interface deals with the lowest common denominator: + bytes, with no special encodings for higher-level objects. + + + + + Read a single byte from the body stream, without encoding or interpretation. + Returns -1 for end-of-stream. + + + + + Read bytes from the body stream into a section of + an existing byte array, without encoding or + interpretation. Returns the number of bytes read from the + body and written into the target array, which may be less + than the number requested if the end-of-stream is reached. + + + + + Retrieve the message body, as a byte array. + + + + + Retrieve the being used to read from the message body. + + + + + Retrieves the content header properties of the message being read. Is of type . + + + + + Construct an instance ready for reading. + + + + + Read a single byte from the body stream, without encoding or interpretation. + Returns -1 for end-of-stream. + + + + + Read bytes from the body stream into a section of + an existing byte array, without encoding or + interpretation. Returns the number of bytes read from the + body and written into the target array, which may be less + than the number requested if the end-of-stream is reached. + + + + + Retrieve the associated with this instance. + + + + + Retrieve this instance's NetworkBinaryReader reading from . + + + If no NetworkBinaryReader instance exists, one is created, + pointing at the beginning of the body. If one already + exists, the existing instance is returned. The instance is + not reset. + + + + + Retrieve the message body, as a byte array. + + + + + Retrieve the being used to read from the message body. + + + + + Retrieves the content header properties of the message being read. Is of type . + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Interface for constructing messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Write a section of a byte array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Write a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + MIME type associated with QPid BytesMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Write a section of a byte array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Write a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Analyzes messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Reads a given number ("count") of bytes from the message body, + placing them into "target", starting at "offset". + + + + + Reads a from the message body. + + + + + Reads a given number of bytes from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + MIME type associated with QPid BytesMessages. + + + + + Construct an instance for reading. See . + + + + + Reads a given number ("count") of bytes from the message body, + placing them into "target", starting at "offset". + + + + + Reads a from the message body. + + + + + Reads a given number of bytes from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Interface for constructing messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + Retrieves the dictionary that will be written into the body of the message. + + + + + Analyzes messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + Parses the message body into an instance. + + + + + Interface for constructing messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a section of a byte array into the message body being assembled. + + + + + Writes a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + The only permitted types are bool, int, short, byte, char, + long, float, double, byte[] and string. + + + + + Writes objects using WriteObject(), one after the other. No length indicator is written. + See also . + + + + + Writes a value into the message body being assembled. + + + + + Writes a string value into the message body being assembled. + + + + + Analyzes messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a array from the message body. + The body contains information about the size of the array to read. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads array from the message body until the end-of-stream is reached. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + MIME type associated with QPid MapMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Finish and retrieve the content body for transmission. + + + Calling this message clears Body to null. Subsequent calls will fault. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Retrieves the dictionary that will be written into the body of the message. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + MIME type associated with QPid MapMessages. + + + + + Construct an instance for reading. See . + + + + + Parses the message body into an instance. + + . + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "MapMessage" wire encoding. + + + + + + Utility class for extracting typed values from strings. + + + + + Creates the protocol violation exception. + + Type of the target. + The source. + Instance of the . + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of an . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + MIME type associated with QPid StreamMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a section of a byte array into the message body being assembled. + + + + + Writes a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + The only permitted types are bool, int, short, byte, char, + long, float, double, byte[] and string. + + + + + Writes objects using WriteObject(), one after the other. No length indicator is written. + See also . + + + + + Writes a value into the message body being assembled. + + + + + Writes a string value into the message body being assembled. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + MIME type associated with QPid StreamMessages. + + + + + Construct an instance for reading. See . + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a array from the message body. + The body contains information about the size of the array to read. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads array from the message body until the end-of-stream is reached. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Tags used in parsing and generating StreamWireFormatting message bodies. + + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + + + + + + + + + + Contains all the information about a message acknowledged + from an AMQP broker within the Basic content-class. + + + The sequence number of the acknowledged message, or + the closed upper bound of acknowledged messages if multiple + is true. + + + Whether this acknoledgement applies to one message + or multiple messages. + + + Contains all the information about a message delivered + from an AMQP broker within the Basic content-class. + + + Default constructor. + + + Constructor that fills the event's properties from + its arguments. + + + The content header of the message. + + + The message body. + + + The consumer tag of the consumer that the message + was delivered to. + + + The delivery tag for this delivery. See + IModel.BasicAck. + + + The exchange the message was originally published + to. + + + The AMQP "redelivered" flag. + + + The routing key used when the message was + originally published. + + + Contains all the information about a message nack'd + from an AMQP broker within the Basic content-class. + + + The sequence number of the nack'd message, or the + closed upper bound of nack'd messages if multiple is + true. + + + Whether this nack applies to one message or + multiple messages. + + + Ignore + Clients should ignore this field. + + + Contains all the information about a message returned + from an AMQP broker within the Basic content-class. + + + The content header of the message. + + + The message body. + + + The exchange the returned message was originally + published to. + + + The AMQP reason code for the return. See + RabbitMQ.Client.Framing.*.Constants. + + + Human-readable text from the broker describing the + reason for the return. + + + The routing key used when the message was + originally published. + + + Wrap an exception thrown by a callback. + + + Access helpful information about the context in + which the wrapped exception was thrown. + + + Access the wrapped exception. + + + Describes an exception that was thrown during the + library's invocation of an application-supplied callback + handler. + + + When an exception is thrown from a callback registered with + part of the RabbitMQ .NET client library, it is caught, + packaged into a CallbackExceptionEventArgs, and passed through + the appropriate IModel's or IConnection's CallbackException + event handlers. If an exception is thrown in a + CallbackException handler, it is silently swallowed, as + CallbackException is the last chance to handle these kinds of + exception. + + + Code constructing CallbackExceptionEventArgs instances will + usually place helpful information about the context of the + call in the IDictionary available through the Detail property. + + + + + + Event relating to connection being blocked. + + + + + Access the reason why connection is blocked. + + + + Event relating to a successful consumer registration + or cancellation. + + + Construct an event containing the consumer-tag of + the consumer the event relates to. + + + Access the consumer-tag of the consumer the event + relates to. + + + + Initializes a new instance of the class. + + The tag before. + The tag after. + + + + Gets the tag before. + + + + + Gets the tag after. + + + + Experimental class exposing an IBasicConsumer's + methods as separate events. + + + Constructor which sets the Model property to the + given value. + + + Fires the Unregistered event. + + + Fires the Registered event. + + + Fires the Received event. + + + Fires the Shutdown event. + + + Event fired on HandleBasicDeliver. + + + Event fired on HandleBasicConsumeOk. + + + Event fired on HandleModelShutdown. + + + Event fired on HandleBasicCancelOk. + + + + Event relating to flow control. + + + + + Access the flow control setting. + + + + + Initializes a new instance of the class. + + The name before. + The name after. + + + + Gets the name before. + + + + + Gets the name after. + + + + + Describes an exception that was thrown during + automatic connection recovery performed by the library. + + + + Thrown when the application tries to make use of a + session or connection that has already been shut + down. + + + + Thrown when a session is destroyed during an RPC call to a + broker. For example, if a TCP connection dropping causes the + destruction of a session in the middle of a QueueDeclare + operation, an OperationInterruptedException will be thrown to + the caller of IModel.QueueDeclare. + + + + Construct an OperationInterruptedException with + the passed-in explanation, if any. + + + Construct an OperationInterruptedException with + the passed-in explanation and prefix, if any. + + + Retrieves the explanation for the shutdown. May + return null if no explanation is available. + + + Construct an instance containing the given + shutdown reason. + + + Thrown when the cause is an + authentication failure. + + + Thrown when the likely cause is an + authentication failure. + + + Thrown when no connection could be opened during a + ConnectionFactory.CreateConnection attempt. + + + Construct a BrokerUnreachableException. The inner exception is associated + with only one connection attempt. + + + Thrown when a SessionManager cannot allocate a new + channel number, or the requested channel number is already in + use. + + + + Indicates that there are no more free channels. + + + + + Indicates that the specified channel is in use + + The requested channel number + + + Retrieves the channel number concerned; will + return -1 in the case where "no more free channels" is + being signalled, or a non-negative integer when "channel is + in use" is being signalled. + + + Thrown when a connection to the broker fails + + + Thrown to indicate that the peer didn't understand + the packet received from the client. Peer sent default message + describing protocol version it is using and transport parameters. + + + The peer's {'A','M','Q','P',txHi,txLo,major,minor} packet is + decoded into instances of this class. + + + + Fills the new instance's properties with the values passed in. + + + The peer's AMQP specification major version. + + + The peer's AMQP specification minor version. + + + The peer's high transport byte. + + + The peer's low transport byte. + + + Thrown to indicate that the peer does not support the + wire protocol version we requested immediately after opening + the TCP socket. + + + Fills the new instance's properties with the values passed in. + + + The client's AMQP specification major version. + + + The client's AMQP specification minor version. + + + The peer's AMQP specification major version. + + + The peer's AMQP specification minor version. + + + + Thrown when the model receives an RPC reply that it wasn't expecting. + + + + The unexpected reply method. + + + + Thrown when the model receives an RPC request it cannot satisfy. + + + + The name of the RPC request that could not be sent. + + + Thrown when the model cannot transmit a method field + because the version of the protocol the model is implementing + does not contain a definition for the field in + question. + + + The name of the unsupported field. + + + The name of the method involved. + + + Thrown when the wire-formatting code cannot encode a + particular .NET value to AMQP protocol format. + + + Construct a WireFormattingException with no + particular offender (i.e. null) + + + Construct a WireFormattingException with the given + offender + + + Object which this exception is complaining about; + may be null if no particular offender exists + + + API-side invocation of connection abort. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close with timeout. + + + API-side invocation of connection.close with timeout. + + + Thrown when the server sends a frame along a channel + that we do not currently have a Session entry in our + SessionManager for. + + + Subclass of ProtocolException representing problems + requiring a connection.close. + + + Instances of subclasses of subclasses + HardProtocolException and SoftProtocolException are thrown in + situations when we detect a problem with the connection-, + channel- or wire-level parts of the AMQP protocol. + + + Retrieve the reply code to use in a + connection/channel close method. + + + Retrieve the shutdown details to use in a + connection/channel close method. Defaults to using + ShutdownInitiator.Library, and this.ReplyCode and + this.Message as the reply code and text, + respectively. + + + The channel number concerned. + + + Heartbeat frame for transmission. Reusable across connections. + + + Try to close connection in a graceful way + + + Shutdown reason contains code and text assigned when closing the connection, + as well as the information about what initiated the close + + + Abort flag, if true, signals to close the ongoing connection immediately + and do not report any errors if it was already closed. + + + Timeout determines how much time internal close operations should be given + to complete. Negative or Timeout.Infinite value mean infinity. + + + + + + Loop only used while quiescing. Use only to cleanly close connection + + + + + We need to close the socket, otherwise attempting to unload the domain + could cause a CannotUnloadAppDomainException + + + + Broadcasts notification of the final shutdown of the connection. + + + + Sets the channel named in the SoftProtocolException into + "quiescing mode", where we issue a channel.close and + ignore everything except for subsequent channel.close + messages and the channel.close-ok reply that should + eventually arrive. + + + + Since a well-behaved peer will not wait indefinitely before + issuing the close-ok, we don't bother with a timeout here; + compare this to the case of a connection.close-ok, where a + timeout is necessary. + + + We need to send the close method and politely wait for a + reply before marking the channel as available for reuse. + + + As soon as SoftProtocolException is detected, we should stop + servicing ordinary application work, and should concentrate + on bringing down the channel as quickly and gracefully as + possible. The way this is done, as per the close-protocol, + is to signal closure up the stack *before* sending the + channel.close, by invoking ISession.Close. Once the upper + layers have been signalled, we are free to do what we need + to do to clean up and shut down the channel. + + + + + + May be called more than once. Should therefore be idempotent. + + + + API-side invocation of connection abort. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close with timeout. + + + API-side invocation of connection.close with timeout. + + + Another overload of a Protocol property, useful + for exposing a tighter type. + + + Explicit implementation of IConnection.Protocol. + + + A type of . + + + + Returns a random item from the list. + + Element item type + Input list + + + + Read a frame from the underlying + transport. Returns null if the read operation timed out + (see Timeout property). + + + Socket read timeout, in milliseconds. Zero signals "infinity". + + + Socket write timeout, in milliseconds. Zero signals "infinity". + + + Essential information from an incoming Connection.Tune + method. + + + The peer's suggested channel-max parameter. + + + The peer's suggested frame-max parameter. + + + The peer's suggested heartbeat parameter. + + + Base class for attributes for controlling the API + autogeneration process. + + + The specification namespace (i.e. version) that + this attribute applies to, or null for all specification + versions. + + + Causes the API generator to ignore the attributed method. + + Mostly used to declare convenience overloads of + various AMQP methods in the IModel interface. Also used + to omit an autogenerated implementation of a method which + is not required for one protocol version. The API + autogeneration process should of course not attempt to produce + an implementation of the convenience methods, as they will be + implemented by hand with sensible defaults, delegating to the + autogenerated variant of the method concerned. + + + Causes the API generator to generate asynchronous + receive code for the attributed method. + + + Causes the API generator to generate + exception-throwing code for, instead of simply ignoring, the + attributed method. + + + + + Informs the API generator which AMQP method field to + use for either a parameter in a request, or for a simple result + in a reply. + + + Informs the API generator which AMQP method to use for + either a request (if applied to an IModel method) or a reply + (if applied to an IModel method result). + + + This attribute, if placed on a parameter in an IModel + method, causes it to be interpreted as a "nowait" parameter for + the purposes of autogenerated RPC reply continuation management + and control. + + + This attribute, if placed on a method in IModel, + causes the method to be interpreted as a factory method + producing a protocol-specific implementation of a common + content header interface. + + + This attribute, if placed on a parameter in a + content-carrying IModel method, causes it to be sent as part of + the content header frame. + + + This attribute, if placed on a parameter in a + content-carrying IModel method, causes it to be sent as part of + the content body frame. + + + This attribute, placed on an IModel method, causes + what would normally be an RPC, sent with ModelRpc, to be sent + as if it were oneway, with ModelSend. The assumption that this + is for a custom continuation (e.g. for BasicConsume/BasicCancel + etc.) + + + + Gets the channel number. + + + + + Gets the close reason. + + + + + Single recipient - no need for multiple handlers to be informed of arriving commands. + + + + + Gets the connection. + + + + + Gets a value indicating whether this session is open. + + + + + Multicast session shutdown event. + + + + Small ISession implementation used only for channel 0. + + + Normal ISession implementation used during normal channel operation. + + + Set channel 0 as quiescing + + Method should be idempotent. Cannot use base.Close + method call because that would prevent us from + sending/receiving Close/CloseOk commands + + + + Thrown when frame parsing code detects an error in the + wire-protocol encoding of a frame. + + For example, potential MalformedFrameException conditions + include frames too short, frames missing their end marker, and + invalid protocol negotiation headers. + + + + Small ISession implementation used during channel quiescing. + + + Manages a queue of waiting AMQP RPC requests. + + + Currently, pipelining of requests is forbidden by this + implementation. The AMQP 0-8 and 0-9 specifications themselves + forbid pipelining, but only by the skin of their teeth and + under a somewhat generous reading. + + + + + Enqueue a continuation, marking a pending RPC. + + + Continuations are retrieved in FIFO order by calling Next(). + + + In the current implementation, only one continuation can + be queued up at once. Calls to Enqueue() when a + continuation is already enqueued will result in + NotSupportedException being thrown. + + + + + Interrupt all waiting continuations. + + + There's just the one potential waiter in the current + implementation. + + + + + Retrieve the next waiting continuation. + + + It is an error to call this method when there are no + waiting continuations. In the current implementation, if + this happens, null will be returned (which will usually + result in an immediate NullPointerException in the + caller). Correct code will always arrange for a + continuation to have been Enqueue()d before calling this + method. + + + + + Called from CheckAutoClose, in a separate thread, + when we decide to close the connection. + + + If m_autoClose and there are no active sessions + remaining, Close()s the connection with reason code + 200. + + + Replace an active session slot with a new ISession + implementation. Used during channel quiescing. + + Make sure you pass in a channelNumber that's currently in + use, as if the slot is unused, you'll get a null pointer + exception. + + + + Subclass of ProtocolException representing problems + requiring a channel.close. + + + Thrown when our peer sends a frame that contains + illegal values for one or more fields. + + + + Simple wrapper around TcpClient. + + + + + TCP-Client with support for http tunnel through http proxy server + + + + + Constructor. + + Host name or IP address of the proxy server. + Port number to connect to the proxy server. + Username for the proxy server. + Password for the proxy server. + + + + Open TCP connection through HTTP-Tunnel. + + Method invokes method 'createConnection' asynchronously. + Destination host name or IP address. + Port number to connect to on the destination host. + Callback + + + + + + Creates a remote TCP connection through a proxy server to the destination host on the destination port. + + Destination host name or IP address. + Port number to connect to on the destination host. + AdressFamliy for tcp client. Currently ignored. + Dto for all container infos + + Returns an open TcpClient object that can be used normally to communicate + with the destination server + + + This method creates a connection to the proxy server and instructs the proxy server + to make a pass through connection to the specified destination host on the specified + port. + + + + + Container for proxy related information + + + + + Simple container for response message + + + + + Event arguments class for the EncryptAsyncCompleted event. + + + + + Constructor. + + Exception information generated by the event. + Cancelled event flag. This flag is set to true if the event was cancelled. + Proxy Connection. The initialized and open TcpClient proxy connection. + + + + The proxy connection. + + + + + This exception is thrown when a general, unexpected proxy error. + + + + + Constructor. + + + + + Constructor. + + Exception message text. + + + + Constructor. + + Exception message text. + The inner exception object. + + + + Constructor. + + Serialization information. + Stream context information. + + + + Collection of helper methods + + + + + Thrown when the connection receives a frame that it wasn't expecting. + + + + + Thrown when the protocol handlers detect an unknown class + number or method number. + + + + The AMQP content-class ID. + + + The AMQP method ID within the content-class, or 0 if none. + + + Reads an AMQP "table" definition from the reader. + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t, + x and V types and the AMQP 0-9-1 A type. + + A . + + + Writes an AMQP "table" to the writer. + + + In this method, we assume that the stream that backs our + NetworkBinaryWriter is a positionable stream - which it is + currently (see Frame.m_accumulator, Frame.GetWriter and + Command.Transmit). + + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t + x and V types and the AMQP 0-9-1 A type. + + + + + Writes an AMQP "table" to the writer. + + + In this method, we assume that the stream that backs our + NetworkBinaryWriter is a positionable stream - which it is + currently (see Frame.m_accumulator, Frame.GetWriter and + Command.Transmit). + + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t + x and V types and the AMQP 0-9-1 A type. + + + + + + Implements a simple RPC client. + + + This class sends requests that can be processed by remote + SimpleRpcServer instances. + + + The basic pattern for accessing a remote service is to + determine the exchange name and routing key needed for + submissions of service requests, and to construct a + SimpleRpcClient instance using that address. Once constructed, + the various Call() and Cast() overloads can be used to send + requests and receive the corresponding replies. + + + string queueName = "ServiceRequestQueue"; // See also Subscription ctors + using (IConnection conn = new ConnectionFactory() + .CreateConnection(serverAddress)) { + using (IModel ch = conn.CreateModel()) { + SimpleRpcClient client = + new SimpleRpcClient(ch, queueName); + client.TimeoutMilliseconds = 5000; // optional + + /// ... make use of the various Call() overloads + } + } + + + Instances of this class declare a queue, so it is the user's + responsibility to ensure that the exchange concerned exists + (using IModel.ExchangeDeclare) before invoking Call() or + Cast(). + + + This class implements only a few basic RPC message formats - + to extend it with support for more formats, either subclass, + or transcode the messages before transmission using the + built-in byte[] format. + + + + + + Construct an instance with no configured + Address. The Address property must be set before Call() or + Cast() are called. + + + Construct an instance that will deliver to the + default exchange (""), with routing key equal to the passed + in queueName, thereby delivering directly to a named queue + on the AMQP server. + + + Construct an instance that will deliver to the + named and typed exchange, with the given routing + key. + + + Construct an instance that will deliver to the + given address. + + + Sends a "jms/stream-message"-encoded RPC request, + and expects an RPC reply in the same format. + + + The arguments passed in must be of types that are + representable as JMS StreamMessage values, and so must the + results returned from the service in its reply message. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + + + Sends a simple byte[] message, without any custom + headers or properties. + + + Delegates directly to Call(IBasicProperties, byte[]), and + discards the properties of the received reply, returning + only the body of the reply. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + Sends a byte[] message and IBasicProperties + header, returning both the body and headers of the received + reply. + + + Sets the "replyProperties" outbound parameter to the + properties of the received reply, and returns the byte[] + body of the reply. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Both sets "replyProperties" to null and returns null when + either the request timed out or we were disconnected + before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + Sends a byte[]/IBasicProperties RPC request, + returning full information about the delivered reply as a + BasicDeliverEventArgs. + + + This is the most general/lowest-level Call()-style method + on SimpleRpcClient. It sets CorrelationId and ReplyTo on + the request message's headers before transmitting the + request to the service via the AMQP server. If the reply's + CorrelationId does not match the request's CorrelationId, + ProtocolViolationException will be thrown. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + + Sends an asynchronous/one-way message to the + service. + + + Close the reply subscription associated with this instance, if any. + + Simply delegates to calling Subscription.Close(). Clears + the Subscription property, so that subsequent Call()s, if + any, will re-initialize it to a fresh Subscription + instance. + + + + Signals that the Subscription we use for receiving + our RPC replies was disconnected while we were + waiting. + + Fires the Disconnected event. + + + + Signals that the configured timeout fired while + waiting for an RPC reply. + + Fires the TimedOut event. + + + + Implement the IDisposable interface, permitting + SimpleRpcClient instances to be used in using + statements. + + + Should initialise m_subscription to be non-null + and usable for fetching RPC replies from the service + through the AMQP server. + + + Retrieves the reply for the request with the given + correlation ID from our internal Subscription. + + Currently requires replies to arrive in the same order as + the requests were sent out. Subclasses may override this + to provide more sophisticated behaviour. + + + + This event is fired whenever Call() detects the + disconnection of the underlying Subscription while waiting + for a reply from the service. + + See also OnDisconnected(). Note that the sending of a + request may result in OperationInterruptedException before + the request is even sent. + + + + This event is fired whenever Call() decides that a + timeout has occurred while waiting for a reply from the + service. + + See also OnTimedOut(). + + + + Retrieve or modify the address that will be used + for the next Call() or Cast(). + + This address represents the service, i.e. the destination + service requests should be published to. It can be changed + at any time before a Call() or Cast() request is sent - + the value at the time of the call is used by Call() and + Cast(). + + + + Retrieve the IModel this instance uses to communicate. + + + Retrieve the Subscription that is used to receive + RPC replies corresponding to Call() RPC requests. May be + null. + + + Upon construction, this property will be null. It is + initialised by the protected virtual method + EnsureSubscription upon the first call to Call(). Calls to + Cast() do not initialise the subscription, since no + replies are expected or possible when using Cast(). + + + + + Retrieve or modify the timeout (in milliseconds) + that will be used for the next Call(). + + + This property defaults to + System.Threading.Timeout.Infinite (i.e. -1). If it is set + to any other value, Call() will only wait for the + specified amount of time before returning indicating a + timeout. + + + See also TimedOut event and OnTimedOut(). + + + + + Implements a simple RPC service, responding to + requests received via a Subscription. + + + This class interprets requests such as those sent by instances + of SimpleRpcClient. + + + The basic pattern for implementing a service is to subclass + SimpleRpcServer, overriding HandleCall and HandleCast as + appropriate, and then to create a Subscription object for + receiving requests from clients, and start an instance of the + SimpleRpcServer subclass with the Subscription. + + + string queueName = "ServiceRequestQueue"; // See also Subscription ctors + using (IConnection conn = new ConnectionFactory() + .CreateConnection(serverAddress)) { + using (IModel ch = conn.CreateModel()) { + Subscription sub = new Subscription(ch, queueName); + new MySimpleRpcServerSubclass(sub).MainLoop(); + } + } + + + Note that this class itself does not declare any resources + (exchanges, queues or bindings). The Subscription we use for + receiving RPC requests should have already declared all the + resources we need. See the Subscription constructors and the + Subscription.Bind method. + + + If you are implementing a service that responds to + "jms/stream-message"-formatted requests (as implemented by + RabbitMQ.Client.Content.IStreamMessageReader), override + HandleStreamMessageCall. Otherwise, override HandleSimpleCall + or HandleCall as appropriate. Asynchronous, one-way requests + are dealt with by HandleCast etc. + + + Every time a request is successfully received and processed + within the server's MainLoop, the request message is Ack()ed + using Subscription.Ack before the next request is + retrieved. This causes the Subscription object to take care of + acknowledging receipt and processing of the request message. + + + If transactional service is enabled, via SetTransactional(), + then after every successful ProcessRequest, IModel.TxCommit is + called. Making use of transactional service has effects on all + parts of the application that share an IModel instance, + completely changing the style of interaction with the AMQP + server. For this reason, it is initially disabled, and must be + explicitly enabled with a call to SetTransactional(). Please + see the documentation for SetTransactional() for details. + + + To stop a running RPC server, call Close(). This will in turn + Close() the Subscription, which will cause MainLoop() to + return to its caller. + + + Unless overridden, ProcessRequest examines properties in the + request content header, and uses them to dispatch to one of + the Handle[...]() methods. See the documentation for + ProcessRequest and each Handle[...] method for details. + + + + + + Create, but do not start, an instance that will + receive requests via the given Subscription. + + + The instance is initially in non-transactional mode. See + SetTransactional(). + + + Call MainLoop() to start the request-processing loop. + + + + + Shut down the server, causing MainLoop() to return + to its caller. + + Acts by calling Close() on the server's Subscription object. + + + + Called by ProcessRequest(), this is the most + general method that handles RPC-style requests. + + + This method should map requestProperties and body to + replyProperties and the returned byte array. + + + The default implementation checks + requestProperties.ContentType, and if it is + "jms/stream-message" (i.e. the current value of + StreamMessageBuilder.MimeType), parses it using + StreamMessageReader and delegates to + HandleStreamMessageCall before encoding and returning the + reply. If the ContentType is any other value, the request + is passed to HandleSimpleCall instead. + + + The isRedelivered flag is true when the server knows for + sure that it has tried to send this request previously + (although not necessarily to this application). It is not + a reliable indicator of previous receipt, however - the + only claim it makes is that a delivery attempt was made, + not that the attempt succeeded. Be careful if you choose + to use the isRedelivered flag. + + + + + Called by ProcessRequest(), this is the most + general method that handles asynchronous, one-way + requests. + + + The default implementation checks + requestProperties.ContentType, and if it is + "jms/stream-message" (i.e. the current value of + StreamMessageBuilder.MimeType), parses it using + StreamMessageReader and delegates to + HandleStreamMessageCall, passing in null as the + replyWriter parameter to indicate that no reply is desired + or possible. If the ContentType is any other value, the + request is passed to HandleSimpleCast instead. + + + The isRedelivered flag is true when the server knows for + sure that it has tried to send this request previously + (although not necessarily to this application). It is not + a reliable indicator of previous receipt, however - the + only claim it makes is that a delivery attempt was made, + not that the attempt succeeded. Be careful if you choose + to use the isRedelivered flag. + + + + + Called by the default HandleCall() implementation + as a fallback. + + If the MIME ContentType of the request did not match any + of the types specially recognised + (e.g. "jms/stream-message"), this method is called instead + with the raw bytes of the request. It should fill in + replyProperties (or set it to null) and return a byte + array to send back to the remote caller as a reply + message. + + + + Called by the default HandleCast() implementation + as a fallback. + + If the MIME ContentType of the request did not match any + of the types specially recognised + (e.g. "jms/stream-message"), this method is called instead + with the raw bytes of the request. + + + + Called by HandleCall and HandleCast when a + "jms/stream-message" request is received. + + + The args array contains the values decoded by HandleCall + or HandleCast. + + + The replyWriter parameter will be null if we were called + from HandleCast, in which case a reply is not expected or + possible, or non-null if we were called from + HandleCall. Use the methods of replyWriter in this case to + assemble your reply, which will be sent back to the remote + caller. + + + This default implementation does nothing, which + effectively sends back an empty reply to any and all + remote callers. + + + + + Enters the main loop of the RPC service. + + + Retrieves requests repeatedly from the service's + subscription. Each request is passed to + ProcessRequest. Once ProcessRequest returns, the request + is acknowledged via Subscription.Ack(). If transactional + mode is enabled, TxCommit is then called. Finally, the + loop begins again. + + + Runs until the subscription ends, which happens either as + a result of disconnection, or of a call to Close(). + + + + + Process a single request received from our + subscription. + + + If the request's properties contain a non-null, non-empty + CorrelationId string (see IBasicProperties), it is assumed + to be a two-way call, requiring a response. The ReplyTo + header property is used as the reply address (via + PublicationAddress.Parse, unless that fails, in which case it + is treated as a simple queue name), and the request is + passed to HandleCall(). + + + If the CorrelationId is absent or empty, the request is + treated as one-way asynchronous event, and is passed to + HandleCast(). + + + Usually, overriding HandleCall(), HandleCast(), or one of + their delegates is sufficient to implement a service, but + in some cases overriding ProcessRequest() is + required. Overriding ProcessRequest() gives the + opportunity to implement schemes for detecting interaction + patterns other than simple request/response or one-way + communication. + + + + + Enables transactional mode. + + + Once enabled, transactional mode is not only enabled for + all users of the underlying IModel instance, but cannot be + disabled without shutting down the entire IModel (which + involves shutting down all the services depending on it, + and should not be undertaken lightly). + + + This method calls IModel.TxSelect, every time it is + called. (TxSelect is idempotent, so this is harmless.) + + + + + Implement the IDisposable interface, permitting + SimpleRpcServer instances to be used in using + statements. + + + Returns true if we are in "transactional" mode, or + false if we are not. + + + Manages a subscription to a queue. + + + This convenience class abstracts away from much of the detail + involved in receiving messages from a queue. + + + Once created, the Subscription consumes from a queue (using a + EventingBasicConsumer). Received deliveries can be retrieved + by calling Next(), or by using the Subscription as an + IEnumerator in, for example, a foreach loop. + + + Note that if the "noAck" option is enabled (which it is by + default), then received deliveries are automatically acked + within the server before they are even transmitted across the + network to us. Calling Ack() on received events will always do + the right thing: if "noAck" is enabled, nothing is done on an + Ack() call, and if "noAck" is disabled, IModel.BasicAck() is + called with the correct parameters. + + + + + Creates a new Subscription in "noAck" mode, + consuming from a named queue. + + + Creates a new Subscription, with full control over + both "noAck" mode and the name of the queue. + + + Creates a new Subscription, with full control over + both "noAck" mode, the name of the queue, and the consumer tag. + + + If LatestEvent is non-null, passes it to + Ack(BasicDeliverEventArgs). Causes LatestEvent to become + null. + + + If we are not in "noAck" mode, calls + IModel.BasicAck with the delivery-tag from ; + otherwise, sends nothing to the server. if is the same as LatestEvent + by pointer comparison, sets LatestEvent to null. + + + Passing an event that did not originate with this Subscription's + channel, will lead to unpredictable behaviour + + + + Closes this Subscription, cancelling the consumer + record in the server. + + + If LatestEvent is non-null, passes it to + Nack(BasicDeliverEventArgs, false, requeue). Causes LatestEvent to become + null. + + + If LatestEvent is non-null, passes it to + Nack(BasicDeliverEventArgs, multiple, requeue). Causes LatestEvent to become + null. + + + If we are not in "noAck" mode, calls + IModel.BasicNack with the delivery-tag from ; + otherwise, sends nothing to the server. if is the same as LatestEvent + by pointer comparison, sets LatestEvent to null. + + + Passing an event that did not originate with this Subscription's + channel, will lead to unpredictable behaviour + + + + Retrieves the next incoming delivery in our + subscription queue. + + + Returns null when the end of the stream is reached and on + every subsequent call. End-of-stream can arise through the + action of the Subscription.Close() method, or through the + closure of the IModel or its underlying IConnection. + + + Updates LatestEvent to the value returned. + + + Does not acknowledge any deliveries at all (but in "noAck" + mode, the server will have auto-acknowledged each event + before it is even sent across the wire to us). + + + + + Retrieves the next incoming delivery in our + subscription queue, or times out after a specified number + of milliseconds. + + + Returns false only if the timeout expires before either a + delivery appears or the end-of-stream is reached. If false + is returned, the out parameter "result" is set to null, + but LatestEvent is not updated. + + + Returns true to indicate a delivery or the end-of-stream. + + + If a delivery is already waiting in the queue, or one + arrives before the timeout expires, it is removed from the + queue and placed in the "result" out parameter. If the + end-of-stream is detected before the timeout expires, + "result" is set to null. + + + Whenever this method returns true, it updates LatestEvent + to the value placed in "result" before returning. + + + End-of-stream can arise through the action of the + Subscription.Close() method, or through the closure of the + IModel or its underlying IConnection. + + + This method does not acknowledge any deliveries at all + (but in "noAck" mode, the server will have + auto-acknowledged each event before it is even sent across + the wire to us). + + + A timeout of -1 (i.e. System.Threading.Timeout.Infinite) + will be interpreted as a command to wait for an + indefinitely long period of time for an item or the end of + the stream to become available. Usage of such a timeout is + equivalent to calling Next() with no arguments (modulo + predictable method signature differences). + + + + + Implementation of the IDisposable interface, + permitting Subscription to be used in using + statements. Simply calls Close(). + + + Implementation of the IEnumerable interface, for + permitting Subscription to be used in foreach + loops. + + + Implementation of the IEnumerator interface, for + permitting Subscription to be used in foreach + loops. + + + Does not acknowledge any deliveries at all. Ack() must be + called explicitly on received deliveries. + + + + + Dummy implementation of the IEnumerator interface, + for permitting Subscription to be used in foreach loops; + Reset()ting a Subscription doesn't make sense, so this + method always throws InvalidOperationException. + + + Retrieve the IBasicConsumer that is receiving the + messages from the server for us. Normally, you will not + need to access this property - use Next() and friends + instead. + + + Retrieve the consumer-tag that this subscription + is using. Will usually be a server-generated + name. + + + Returns the most recent value returned by Next(), + or null when either no values have been retrieved yet, the + end of the subscription has been reached, or the most + recent value has already been Ack()ed. See also the + documentation for Ack(). + + + Retrieve the IModel our subscription is carried by. + + + Returns true if we are in "noAck" mode, where + calls to Ack() will be no-ops, and where the server acks + messages before they are delivered to us. Returns false if + we are in a mode where calls to Ack() are required, and + where such calls will actually send an acknowledgement + message across the network to the server. + + + Retrieve the queue name we have subscribed to. + + + Implementation of the IEnumerator interface, for + permitting Subscription to be used in foreach + loops. + + + As per the IEnumerator interface definition, throws + InvalidOperationException if LatestEvent is null. + + + Does not acknowledge any deliveries at all. Ack() must be + called explicitly on received deliveries. + + + + + A thread-safe single-assignment reference cell. + + A fresh BlockingCell holds no value (is empty). Any thread + reading the Value property when the cell is empty will block + until a value is made available by some other thread. The Value + property can only be set once - on the first call, the + BlockingCell is considered full, and made immutable. Further + attempts to set Value result in a thrown + InvalidOperationException. + + + + Return valid timeout value + If value of the parameter is less then zero, return 0 + to mean infinity + + + Retrieve the cell's value, waiting for the given + timeout if no value is immediately available. + + + If a value is present in the cell at the time the call is + made, the call will return immediately. Otherwise, the + calling thread blocks until either a value appears, or + operation times out. + + + If no value was available before the timeout, an exception + is thrown. + + + + + Retrieve the cell's value, waiting for the given + timeout if no value is immediately available. + + + If a value is present in the cell at the time the call is + made, the call will return immediately. Otherwise, the + calling thread blocks until either a value appears, or + operation times out. + + + If no value was available before the timeout, an exception + is thrown. + + + + + Retrieve the cell's value, blocking if none exists + at present, or supply a value to an empty cell, thereby + filling it. + + + + Miscellaneous debugging and development utilities. + + Not part of the public API. + + + + Print a hex dump of the supplied bytes to stdout. + + + Print a hex dump of the supplied bytes to the supplied TextWriter. + + + Prints an indented key/value pair; used by DumpProperties() + Recurses into the value using DumpProperties(). + + + Dump properties of objects to the supplied writer. + + + Used internally by class Either. + + + Models the disjoint union of two alternatives, a + "left" alternative and a "right" alternative. + Borrowed from ML, Haskell etc. + + + Private constructor. Use the static methods Left, Right instead. + + + Constructs an Either instance representing a Left alternative. + + + Constructs an Either instance representing a Right alternative. + + + Retrieve the alternative represented by this instance. + + + Retrieve the value carried by this instance. + + + A class for allocating integer IDs in a given range. + + + Creates an IntAllocator allocating integer IDs within the inclusive range [start, end] + + + Allocate a fresh integer from the range, or return -1 if no more integers + are available. This operation is guaranteed to run in O(1) + + + Make the provided integer available for allocation again. This operation + runs in amortized O(sqrt(range size)) time: About every sqrt(range size) + operations will take O(range_size + number of intervals) to complete and + the rest run in constant time. + + No error checking is performed, so if you double Free or Free an integer + that was not originally Allocated the results are undefined. Sorry. + + + + Subclass of BinaryReader that reads integers etc in correct network order. + + + + Kludge to compensate for .NET's broken little-endian-only BinaryReader. + Relies on BinaryReader always being little-endian. + + + + + + Construct a NetworkBinaryReader over the given input stream. + + + + + Construct a NetworkBinaryReader over the given input + stream, reading strings using the given encoding. + + + + Helper method for constructing a temporary + BinaryReader over a byte[]. + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Subclass of BinaryWriter that writes integers etc in correct network order. + + + +

+ Kludge to compensate for .NET's broken little-endian-only BinaryWriter. +

+ See also NetworkBinaryReader. +

+
+
+ + + Construct a NetworkBinaryWriter over the given input stream. + + + + + Construct a NetworkBinaryWriter over the given input + stream, reading strings using the given encoding. + + + + Helper method for constructing a temporary + BinaryWriter streaming into a fresh MemoryStream + provisioned with the given initialSize. + + + Helper method for extracting the byte[] contents + of a BinaryWriter over a MemoryStream, such as constructed + by TemporaryBinaryWriter. + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + A thread-safe shared queue implementation. + + + A thread-safe shared queue implementation. + + + Flag holding our current status. + + + The shared queue. + + Subclasses must ensure appropriate locking discipline when + accessing this field. See the implementation of Enqueue, + Dequeue. + + + + Close the queue. Causes all further Enqueue() + operations to throw EndOfStreamException, and all pending + or subsequent Dequeue() operations to throw an + EndOfStreamException once the queue is empty. + + + Retrieve the first item from the queue, or block if none available + + Callers of Dequeue() will block if no items are available + until some other thread calls Enqueue() or the queue is + closed. In the latter case this method will throw + EndOfStreamException. + + + + Retrieve the first item from the queue, or return + nothing if no items are available after the given + timeout + + + If one or more items are present on the queue at the time + the call is made, the call will return + immediately. Otherwise, the calling thread blocks until + either an item appears on the queue, or + millisecondsTimeout milliseconds have elapsed. + + + Returns true in the case that an item was available before + the timeout, in which case the out parameter "result" is + set to the item itself. + + + If no items were available before the timeout, returns + false, and sets "result" to null. + + + A timeout of -1 (i.e. System.Threading.Timeout.Infinite) + will be interpreted as a command to wait for an + indefinitely long period of time for an item to become + available. Usage of such a timeout is equivalent to + calling Dequeue() with no arguments. See also the MSDN + documentation for + System.Threading.Monitor.Wait(object,int). + + + If no items are present and the queue is in a closed + state, or if at any time while waiting the queue + transitions to a closed state (by a call to Close()), this + method will throw EndOfStreamException. + + + + + Retrieve the first item from the queue, or return + defaultValue immediately if no items are + available + + + If one or more objects are present in the queue at the + time of the call, the first item is removed from the queue + and returned. Otherwise, the defaultValue that was passed + in is returned immediately. This defaultValue may be null, + or in cases where null is part of the range of the queue, + may be some other sentinel object. The difference between + DequeueNoWait() and Dequeue() is that DequeueNoWait() will + not block when no items are available in the queue, + whereas Dequeue() will. + + + If at the time of call the queue is empty and in a + closed state (following a call to Close()), then this + method will throw EndOfStreamException. + + + + + Place an item at the end of the queue. + + If there is a thread waiting for an item to arrive, the + waiting thread will be woken, and the newly Enqueued item + will be passed to it. If the queue is closed on entry to + this method, EndOfStreamException will be thrown. + + + + Implementation of the IEnumerable interface, for + permitting SharedQueue to be used in foreach + loops. + + + Implementation of the IEnumerable interface, for + permitting SharedQueue to be used in foreach + loops. + + + Call only when the lock on m_queue is held. + + + + Implementation of the IEnumerator interface, for + permitting SharedQueue to be used in foreach loops. + + + Construct an enumerator for the given + SharedQueue. + + + Reset()ting a SharedQueue doesn't make sense, so + this method always throws + InvalidOperationException. + + + Miscellaneous helpful XML utilities. + + + Private constructor - this class has no instances + + + Constructs an indenting XmlTextWriter that writes to a + fresh MemoryStream. + + + Constructs an indenting XmlTextWriter that writes to + the supplied stream. + + + Constructs an indenting XmlTextWriter that writes to + the supplied file name. + + + Serializes an arbitrary serializable object to an + XML document. + +
+
diff --git a/DSWeb/packages.config b/DSWeb/packages.config index 8eb25efa..93c0c927 100644 --- a/DSWeb/packages.config +++ b/DSWeb/packages.config @@ -30,6 +30,7 @@ + \ No newline at end of file diff --git a/packages/RabbitMQ.Client.3.6.9/.signature.p7s b/packages/RabbitMQ.Client.3.6.9/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..96820626adc7f0173beaa4837d41b543486fbe8b GIT binary patch literal 9484 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 >po38K_7pUs@vtui0rU2W^j_ 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 + Object describing various overarching parameters + associated with a particular AMQP protocol variant. + + + + + Construct a connection from a given set of parameters, + a frame handler, and no automatic recovery. + The "insist" parameter is passed on to the AMQP connection.open method. + + + + + Construct a connection from a given set of parameters, + a frame handler, and automatic recovery settings. + + + + + Construct a connection from a given set of parameters, + a frame handler, a client-provided name, and no automatic recovery. + The "insist" parameter is passed on to the AMQP connection.open method. + + + + + Construct a connection from a given set of parameters, + a frame handler, a client-provided name, and automatic recovery settings. + + + + + Construct a frame handler for a given endpoint. + + Socket factory method. + Timeout in milliseconds. + Represents a TCP-addressable AMQP peer: a host name and port number. + + + + Construct a protocol model atop a given session. + + + + + Retrieve the protocol's API name, used for printing, + configuration properties, IDE integration, Protocols.cs etc. + + + + + Retrieve the protocol's default TCP port. + + + + + Retrieve the protocol's major version number. + + + + + Retrieve the protocol's minor version number. + + + + + Retrieve the protocol's revision (if specified). + + + + Protocol major version (= 0) + + + Protocol minor version (= 9) + + + Protocol revision (= 1) + + + Protocol API name (= AMQP_0_9_1) + + + Default TCP port (= 5672) + + + (= 1) + + + (= 2) + + + (= 3) + + + (= 8) + + + (= 4096) + + + (= 206) + + + (= 200) + + + (= 311) + + + (= 313) + + + (= 320) + + + (= 402) + + + (= 403) + + + (= 404) + + + (= 405) + + + (= 406) + + + (= 501) + + + (= 502) + + + (= 503) + + + (= 504) + + + (= 505) + + + (= 506) + + + (= 530) + + + (= 540) + + + (= 541) + + + Autogenerated type. AMQP specification method "connection.start". + + + + A decoded AMQP method frame. + + + + AMQP methods can be RPC requests, RPC responses, exceptions + (ChannelClose, ConnectionClose), or one-way asynchronous + messages. Currently this information is not recorded in their + type or interface: it is implicit in the way the method is + used, and the way it is defined in the AMQP specification. A + future revision of the RabbitMQ .NET client library may extend + the IMethod interface to represent this information + explicitly. + + + + + + Retrieves the class ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the method ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the name of this method - for debugging use. + + + + Autogenerated type. AMQP specification method "connection.start-ok". + + + Autogenerated type. AMQP specification method "connection.secure". + + + Autogenerated type. AMQP specification method "connection.secure-ok". + + + Autogenerated type. AMQP specification method "connection.tune". + + + Autogenerated type. AMQP specification method "connection.tune-ok". + + + Autogenerated type. AMQP specification method "connection.open". + + + Autogenerated type. AMQP specification method "connection.open-ok". + + + Autogenerated type. AMQP specification method "connection.close". + + + Autogenerated type. AMQP specification method "connection.close-ok". + + + Autogenerated type. AMQP specification method "connection.blocked". + + + Autogenerated type. AMQP specification method "connection.unblocked". + + + Autogenerated type. AMQP specification method "channel.open". + + + Autogenerated type. AMQP specification method "channel.open-ok". + + + Autogenerated type. AMQP specification method "channel.flow". + + + Autogenerated type. AMQP specification method "channel.flow-ok". + + + Autogenerated type. AMQP specification method "channel.close". + + + Autogenerated type. AMQP specification method "channel.close-ok". + + + Autogenerated type. AMQP specification method "exchange.declare". + + + Autogenerated type. AMQP specification method "exchange.declare-ok". + + + Autogenerated type. AMQP specification method "exchange.delete". + + + Autogenerated type. AMQP specification method "exchange.delete-ok". + + + Autogenerated type. AMQP specification method "exchange.bind". + + + Autogenerated type. AMQP specification method "exchange.bind-ok". + + + Autogenerated type. AMQP specification method "exchange.unbind". + + + Autogenerated type. AMQP specification method "exchange.unbind-ok". + + + Autogenerated type. AMQP specification method "queue.declare". + + + Autogenerated type. AMQP specification method "queue.declare-ok". + + + Autogenerated type. AMQP specification method "queue.bind". + + + Autogenerated type. AMQP specification method "queue.bind-ok". + + + Autogenerated type. AMQP specification method "queue.unbind". + + + Autogenerated type. AMQP specification method "queue.unbind-ok". + + + Autogenerated type. AMQP specification method "queue.purge". + + + Autogenerated type. AMQP specification method "queue.purge-ok". + + + Autogenerated type. AMQP specification method "queue.delete". + + + Autogenerated type. AMQP specification method "queue.delete-ok". + + + Autogenerated type. AMQP specification method "basic.qos". + + + Autogenerated type. AMQP specification method "basic.qos-ok". + + + Autogenerated type. AMQP specification method "basic.consume". + + + Autogenerated type. AMQP specification method "basic.consume-ok". + + + Autogenerated type. AMQP specification method "basic.cancel". + + + Autogenerated type. AMQP specification method "basic.cancel-ok". + + + Autogenerated type. AMQP specification method "basic.publish". + + + Autogenerated type. AMQP specification method "basic.return". + + + Autogenerated type. AMQP specification method "basic.deliver". + + + Autogenerated type. AMQP specification method "basic.get". + + + Autogenerated type. AMQP specification method "basic.get-ok". + + + Autogenerated type. AMQP specification method "basic.get-empty". + + + Autogenerated type. AMQP specification method "basic.ack". + + + Autogenerated type. AMQP specification method "basic.reject". + + + Autogenerated type. AMQP specification method "basic.recover-async". + + + Autogenerated type. AMQP specification method "basic.recover". + + + Autogenerated type. AMQP specification method "basic.recover-ok". + + + Autogenerated type. AMQP specification method "basic.nack". + + + Autogenerated type. AMQP specification method "tx.select". + + + Autogenerated type. AMQP specification method "tx.select-ok". + + + Autogenerated type. AMQP specification method "tx.commit". + + + Autogenerated type. AMQP specification method "tx.commit-ok". + + + Autogenerated type. AMQP specification method "tx.rollback". + + + Autogenerated type. AMQP specification method "tx.rollback-ok". + + + Autogenerated type. AMQP specification method "confirm.select". + + + Autogenerated type. AMQP specification method "confirm.select-ok". + + + Autogenerated type. AMQP specification content header properties for content class "basic" + + + + A decoded AMQP content header frame. + + + + + Retrieve the AMQP class ID of this content header. + + + + + Retrieve the AMQP class name of this content header. + + + + + Fill this instance from the given byte buffer stream. + + + + + Retrieve the AMQP class ID of this content header. + + + + + Retrieve the AMQP class name of this content header. + + + + Common AMQP Basic content-class headers interface, + spanning the union of the functionality offered by versions + 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + The specification code generator provides + protocol-version-specific implementations of this interface. To + obtain an implementation of this interface in a + protocol-version-neutral way, use . + + + Each property is readable, writable and clearable: a cleared + property will not be transmitted over the wire. Properties on a + fresh instance are clear by default. + + + + + + Clear the property. + + + + + Clear the property (cluster id is deprecated in AMQP 0-9-1). + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the Type property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present (cluster id is deprecated in AMQP 0-9-1). + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the Type property is present. + + + + + Returns true if the UserId property is present. + + + + Sets to either persistent (2) or non-persistent (1). + + + The numbers 1 and 2 for delivery mode are "magic" in that + they appear in the AMQP 0-8 and 0-9 specifications as part + of the definition of the DeliveryMode Basic-class property, + without being defined as named constants. + + + Calling this method causes to take on a value. + In order to reset to the default empty condition, call . + + + + + + Application Id. + + + + + Intra-cluster routing identifier (cluster id is deprecated in AMQP 0-9-1). + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Application correlation identifier. + + + + + Non-persistent (1) or persistent (2). + + + + + Message expiration specification. + + + + + Message header field table. Is of type . + + + + + Application message Id. + + + + + Sets to either persistent (2) or non-persistent (1). + + + + + Message priority, 0 to 9. + + + + + Destination to reply to. + + + + + Convenience property; parses property using , + and serializes it using . + Returns null if property cannot be parsed by . + + + + + Message timestamp. + + + + + Message type name. + + + + + User Id. + + + + + Clear the property. + + + + + Clear the property (cluster id is deprecated in AMQP 0-9-1). + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the Type property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present (cluster id is deprecated in AMQP 0-9-1). + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the Type property is present. + + + + + Returns true if the UserId property is present. + + + + Sets to either persistent (2) or non-persistent (1). + + + The numbers 1 and 2 for delivery mode are "magic" in that + they appear in the AMQP 0-8 and 0-9 specifications as part + of the definition of the DeliveryMode Basic-class property, + without being defined as named constants. + + + Calling this method causes to take on a value. + In order to reset to the default empty condition, call . + + + + + + Application Id. + + + + + Intra-cluster routing identifier (cluster id is deprecated in AMQP 0-9-1). + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Application correlation identifier. + + + + + Non-persistent (1) or persistent (2). + + + + + Message expiration specification. + + + + + Message header field table. Is of type . + + + + + Application message Id. + + + + + Sets to either persistent (2) or non-persistent (1). + + + + + Message priority, 0 to 9. + + + + + Destination to reply to. + + + + + Convenience property; parses property using , + and serializes it using . + Returns null if property cannot be parsed by . + + + + + Message timestamp. + + + + + Message type name. + + + + + User Id. + + + + Autogenerated type. Private implementation class - do not use directly. + + + + Retrieves the class ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the method ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the name of this method - for debugging use. + + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Not part of the public API. Extension of IModel to + include utilities and connection-setup routines needed by the + implementation side. + + This interface is used by the API autogeneration + process. The AMQP XML specifications are read by the spec + compilation tool, and after the basic method interface and + implementation classes are generated, this interface is + scanned, and a spec-version-specific implementation is + autogenerated. Annotations are used on certain methods, return + types, and parameters, to customise the details of the + autogeneration process. + + + + + + + Common AMQP model, spanning the union of the + functionality offered by versions 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + Extends the interface, so that the "using" + statement can be used to scope the lifetime of a channel when appropriate. + + + + + Abort this session. + + + If the session is already closed (or closing), then this + method does nothing but wait for the in-progress close + operation to complete. This method will not return to the + caller until the shutdown is complete. + In comparison to normal method, will not throw + or or any other during closing model. + + + + + Abort this session. + + + The method behaves in the same way as , with the only + difference that the model is closed with the given model close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the model + + + + + + (Spec method) Acknowledge one or more delivered message(s). + + + + + Delete a Basic content-class consumer. + + + + Start a Basic content-class consumer. + + The consumer is started with noAck=false (i.e. BasicAck is required), + an empty consumer tag (i.e. the server creates and returns a fresh consumer tag), + noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + The consumer is started with + an empty consumer tag (i.e. the server creates and returns a fresh consumer tag), + noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + The consumer is started with noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + + + (Spec method) Retrieve an individual message, if + one is available; returns null if the server answers that + no messages are currently available. See also . + + + + Reject one or more delivered message(s). + + + + (Spec method) Convenience overload of BasicPublish. + + + The publication occurs with mandatory=false and immediate=false. + + + + + (Spec method) Convenience overload of BasicPublish. + + + The publication occurs with mandatory=false + + + + + (Spec method) Convenience overload of BasicPublish. + + + + + (Spec method) Configures QoS parameters of the Basic content-class. + + + + + (Spec method). + + + + + (Spec method). + + + + (Spec method) Reject a delivered message. + + + Close this session. + + If the session is already closed (or closing), then this + method does nothing but wait for the in-progress close + operation to complete. This method will not return to the + caller until the shutdown is complete. + + + + Close this session. + + The method behaves in the same way as Close(), with the only + difference that the model is closed with the given model + close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the model + + + + + + Enable publisher acknowledgements. + + + + + Construct a completely empty content header for use with the Basic content class. + + + + + (Extension method) Bind an exchange to an exchange. + + + + + (Extension method) Bind an exchange to an exchange. + + + + + Like ExchangeBind but sets nowait to true. + + + + (Spec method) Declare an exchange. + + The exchange is declared non-passive and non-internal. + The "nowait" option is not exercised. + + + + + (Spec method) Declare an exchange. + + + The exchange is declared non-passive, non-autodelete, and + non-internal, with no arguments. The "nowait" option is not exercised. + + + + + (Spec method) Declare an exchange. + + + The exchange is declared non-passive, non-durable, non-autodelete, and + non-internal, with no arguments. The "nowait" option is not exercised. + + + + + Same as ExchangeDeclare but sets nowait to true and returns void (as there + will be no response from the server). + + + + + (Spec method) Declare an exchange. + + + The exchange is declared passive. + + + + + (Spec method) Delete an exchange. + + + + (Spec method) Delete an exchange. + + The exchange is deleted regardless of any queue bindings. + + + + + Like ExchangeDelete but sets nowait to true. + + + + + (Extension method) Unbind an exchange from an exchange. + + + + + (Extension method) Unbind an exchange from an exchange. + + + + + Like ExchangeUnbind but sets nowait to true. + + + + + (Spec method) Bind a queue to an exchange. + + + + (Spec method) Bind a queue to an exchange. + + + Same as QueueBind but sets nowait parameter to true. + + + (Spec method) Declare a queue. + + The queue is declared non-passive, non-durable, + but exclusive and autodelete, with no arguments. The + server autogenerates a name for the queue - the generated name is the return value of this method. + + + + (Spec method) Declare a queue. + + + + Same as QueueDeclare but sets nowait to true and returns void (as there + will be no response from the server). + + + + Declare a queue passively. + + The queue is declared passive, non-durable, + non-exclusive, and non-autodelete, with no arguments. + The queue is declared passively; i.e. only check if it exists. + + + + + Returns the number of messages in a queue ready to be delivered + to consumers. This method assumes the queue exists. If it doesn't, + an exception will be closed with an exception. + + The name of the queue + + + + Returns the number of consumers on a queue. + This method assumes the queue exists. If it doesn't, + an exception will be closed with an exception. + + The name of the queue + + + + (Spec method) Delete a queue. + + + Returns the number of messages purged during queue deletion. + uint.MaxValue. + + + + + (Spec method) Delete a queue. + + + Returns the number of messages purged during queue deletion. + + + + + Same as QueueDelete but sets nowait parameter to true + and returns void (as there will be no response from the server) + + + + + (Spec method) Purge a queue of messages. + + + Returns the number of messages purged. + + + + + (Spec method) Unbind a queue from an exchange. + + + + + (Spec method) Commit this session's active TX transaction. + + + + + (Spec method) Roll back this session's active TX transaction. + + + + + (Spec method) Enable TX mode for this session. + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + True if no nacks were received within the timeout, otherwise false. + How long to wait (at most) before returning + whether or not any nacks were returned. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + True if no nacks were received within the timeout, otherwise false. + How long to wait (at most) before returning + whether or not any nacks were returned. + + True if the method returned because + the timeout elapsed, not because all messages were ack'd or at least one nack'd. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been ack'd by the broker. If a nack is received, throws an + OperationInterrupedException exception immediately. + + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been ack'd by the broker. If a nack is received or the timeout + elapses, throws an OperationInterrupedException exception immediately. + + + + + Channel number, unique per connections. + + + + + Returns null if the session is still in a state where it can be used, + or the cause of its closure otherwise. + + + + Signalled when an unexpected message is delivered + + Under certain circumstances it is possible for a channel to receive a + message delivery which does not match any consumer which is currently + set up via basicConsume(). This will occur after the following sequence + of events: + + ctag = basicConsume(queue, consumer); // i.e. with explicit acks + // some deliveries take place but are not acked + basicCancel(ctag); + basicRecover(false); + + Since requeue is specified to be false in the basicRecover, the spec + states that the message must be redelivered to "the original recipient" + - i.e. the same channel / consumer-tag. But the consumer is no longer + active. + + In these circumstances, you can register a default consumer to handle + such deliveries. If no default consumer is registered an + InvalidOperationException will be thrown when such a delivery arrives. + + Most people will not need to use this. + + + + Returns true if the model is no longer in a state where it can be used. + + + + + Returns true if the model is still in a state where it can be used. + Identical to checking if equals null. + + + + When in confirm mode, return the sequence number of the next message to be published. + + + + + Signalled when a Basic.Ack command arrives from the broker. + + + + + Signalled when a Basic.Nack command arrives from the broker. + + + + + All messages received before this fires that haven't been ack'ed will be redelivered. + All messages received afterwards won't be. + + + Handlers for this event are invoked by the connection thread. + It is sometimes useful to allow that thread to know that a recover-ok + has been received, rather than the thread that invoked . + + + + + Signalled when a Basic.Return command arrives from the broker. + + + + + Signalled when an exception occurs in a callback invoked by the model. + + Examples of cases where this event will be signalled + include exceptions thrown in methods, or + exceptions thrown in delegates etc. + + + + + Notifies the destruction of the model. + + + If the model is already destroyed at the time an event + handler is added to this event, the event handler will be fired immediately. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + Sends a Connection.TuneOk. Used during connection + initialisation. + + + Handle incoming Basic.Ack methods. Signals a + BasicAckEvent. + + + Handle incoming Basic.CancelOk methods. + + + Handle incoming Basic.ConsumeOk methods. + + + Handle incoming Basic.Deliver methods. Dispatches + to waiting consumers. + + + Handle incoming Basic.GetEmpty methods. Routes the + information to a waiting Basic.Get continuation. + + Note that the clusterId field is ignored, as in the + specification it notes that it is "deprecated pending + review". + + + + Handle incoming Basic.GetOk methods. Routes the + information to a waiting Basic.Get continuation. + + + Handle incoming Basic.Nack methods. Signals a + BasicNackEvent. + + + Handle incoming Basic.RecoverOk methods + received in reply to Basic.Recover. + + + + Handle incoming Basic.Return methods. Signals a + BasicReturnEvent. + + + Handle an incoming Channel.Close. Shuts down the + session and model. + + + Handle an incoming Channel.CloseOk. + + + Handle incoming Channel.Flow methods. Either + stops or resumes sending the methods that have content. + + + Handle an incoming Connection.Blocked. + + + Handle an incoming Connection.Close. Shuts down the + connection and all sessions and models. + + + Handle an incoming Connection.OpenOk. + + + Handle incoming Connection.Secure + methods. + + + Handle an incoming Connection.Start. Used during + connection initialisation. + + + Handle incoming Connection.Tune + methods. + + + Handle an incominga Connection.Unblocked. + + + Handle incoming Queue.DeclareOk methods. Routes the + information to a waiting Queue.DeclareOk continuation. + + + Used to send a Basic.Cancel method. The public + consume API calls this while also managing internal + datastructures. + + + Used to send a Basic.Consume method. The public + consume API calls this while also managing internal + datastructures. + + + Used to send a Basic.Get. Basic.Get is a special + case, since it can result in a Basic.GetOk or a + Basic.GetEmpty, so this level of manual control is + required. + + + Used to send a Basic.Publish method. Called by the + public publish method after potential null-reference issues + have been rectified. + + + Used to send a Channel.Close. Called during + session shutdown. + + + Used to send a Channel.CloseOk. Called during + session shutdown. + + + Used to send a Channel.FlowOk. Confirms that + Channel.Flow from the broker was processed. + + + Used to send a Channel.Open. Called during session + initialisation. + + + Used to send a Confirm.Select method. The public + confirm API calls this while also managing internal + datastructures. + + + Used to send a Connection.Close. Called during + connection shutdown. + + + Used to send a Connection.CloseOk. Called during + connection shutdown. + + + Used to send a Connection.Open. Called during + connection startup. + + + Used to send a Connection.SecureOk. Again, this is + special, like Basic.Get. + + + Used to send a Connection.StartOk. This is + special, like Basic.Get. + + + Used to send a Exchange.Bind method. Called by the + public bind method. + + + + Used to send a Exchange.Declare method. Called by the + public declare method. + + + + Used to send a Exchange.Delete method. Called by the + public delete method. + + + + Used to send a Exchange.Unbind method. Called by the + public unbind method. + + + + Used to send a Queue.Bind method. Called by the + public bind method. + + + Used to send a Queue.Declare method. Called by the + public declare method. + + + Used to send a Queue.Delete method. Called by the + public delete method. + + + Used to send a Queue.Purge method. Called by the + public purge method. + + + + A marker interface for entities that are recoverable (currently connection or channel). + + + + Only used to kick-start a connection open + sequence. See + + + Broadcasts notification of the final shutdown of the model. + + + Do not call anywhere other than at the end of OnSessionShutdown. + + + Must not be called when m_closeReason == null, because + otherwise there's a window when a new continuation could be + being enqueued at the same time as we're broadcasting the + shutdown event. See the definition of Enqueue() above. + + + + + Handle incoming Connection.Tune + methods. + + + + Represents a TCP-addressable AMQP peer: a host name and port number. + + + Some of the constructors take, as a convenience, a System.Uri + instance representing an AMQP server address. The use of Uri + here is not standardised - Uri is simply a convenient + container for internet-address-like components. In particular, + the Uri "Scheme" property is ignored: only the "Host" and + "Port" properties are extracted. + + + + + Default Amqp ssl port. + + + + + Indicates that the default port for the protocol should be used. + + + + + Creates a new instance of the . + + Hostname. + Port number. If the port number is -1, the default port number will be used. + Ssl option. + + + + Creates a new instance of the . + + Hostname. + Port number. If the port number is -1, the default port number will be used. + + + + Construct an AmqpTcpEndpoint with "localhost" as the hostname, and using the default port. + + + + + Creates a new instance of the with the given Uri and ssl options. + + + Please see the class overview documentation for information about the Uri format in use. + + + + + Creates a new instance of the with the given Uri. + + + Please see the class overview documentation for information about the Uri format in use. + + + + + Clones the endpoint. + + A copy with the same hostname, port, and TLS settings + + + + Clones the endpoint using the provided hostname. + + Hostname to use + A copy with the provided hostname and port/TLS settings of this endpoint + + + + Construct an instance from a protocol and an address in "hostname:port" format. + + + If the address string passed in contains ":", it is split + into a hostname and a port-number part. Otherwise, the + entire string is used as the hostname, and the port-number + is set to -1 (meaning the default number for the protocol + variant specified). + Hostnames provided as IPv6 must appear in square brackets ([]). + + + + + Splits the passed-in string on ",", and passes the substrings to . + + + Accepts a string of the form "hostname:port, + hostname:port, ...", where the ":port" pieces are + optional, and returns a corresponding array of s. + + + + + Compares this instance by value (protocol, hostname, port) against another instance. + + + + + Implementation of hash code depending on protocol, hostname and port, + to line up with the implementation of . + + + + + Returns a URI-like string of the form amqp-PROTOCOL://HOSTNAME:PORTNUMBER. + + + This method is intended mainly for debugging and logging use. + + + + + Retrieve or set the hostname of this . + + + + Retrieve or set the port number of this + AmqpTcpEndpoint. A port number of -1 causes the default + port number. + + + + Retrieve IProtocol of this . + + + + + Retrieve the SSL options for this AmqpTcpEndpoint. If not set, null is returned. + + + + + Structure holding an AMQP timestamp, a posix 64-bit time_t. + + + When converting between an AmqpTimestamp and a System.DateTime, + be aware of the effect of your local timezone. In particular, + different versions of the .NET framework assume different + defaults. + + + We have chosen a signed 64-bit time_t here, since the AMQP + specification through versions 0-9 is silent on whether + timestamps are signed or unsigned. + + + + + + Construct an . + + Unix time. + + + + Provides a debugger-friendly display. + + + + + Unix time. + + + + Represents a version of the AMQP specification. + + + Vendor-specific variants of particular official specification + versions exist: this class simply represents the AMQP + specification version, and does not try to represent + information about any custom variations involved. + + + AMQP version 0-8 peers sometimes advertise themselves as + version 8-0: for this reason, this class's constructor + special-cases 8-0, rewriting it at construction time to be 0-8 instead. + + + + + + Construct an from major and minor version numbers. + + + Converts major=8 and minor=0 into major=0 and minor=8. Please see the class comment. + + + + + Implement value-equality comparison. + + + + + Implement hashing as for value-equality. + + + + + Format appropriately for display. + + + The specification currently uses "MAJOR-MINOR" as a display format. + + + + + The AMQP specification major version number. + + + + + The AMQP specification minor version number. + + + + + A pluggable authentication mechanism. + + + + + Handle one round of challenge-response. + + + + + Return a new authentication mechanism implementation. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + Represents Basic.GetOk responses from the server. + + Basic.Get either returns an instance of this class, or null if a Basic.GetEmpty was received. + + + + + Sets the new instance's properties from the arguments passed in. + + Delivery tag for the message. + Redelivered flag for the message + The exchange this message was published to. + Routing key with which the message was published. + The number of messages pending on the queue, excluding the message being delivered. + The Basic-class content header properties for the message. + + + + + Retrieves the Basic-class content header properties for this message. + + + + + Retrieves the body of this message. + + + + + Retrieve the delivery tag for this message. See also . + + + + + Retrieve the exchange this message was published to. + + + + + Retrieve the number of messages pending on the queue, excluding the message being delivered. + + + Note that this figure is indicative, not reliable, and can + change arbitrarily as messages are added to the queue and removed by other clients. + + + + + Retrieve the redelivered flag for this message. + + + + + Retrieve the routing key with which this message was published. + + + + Wrapper for a byte[]. May appear as values read from + and written to AMQP field tables. + + + The sole reason for the existence of this class is to permit + encoding of byte[] as 'x' in AMQP field tables, an extension + to the specification that is part of the tentative JMS mapping + implemented by QPid. + + + Instances of this object may be found as values held in + IDictionary instances returned from + RabbitMQ.Client.Impl.WireFormatting.ReadTable, e.g. as part of + IBasicProperties.Headers tables. Likewise, instances may be + set as values in an IDictionary table to be encoded by + RabbitMQ.Client.Impl.WireFormatting.WriteTable. + + + When an instance of this class is encoded/decoded, the type + tag 'x' is used in the on-the-wire representation. The AMQP + standard type tag 'S' is decoded to a raw byte[], and a raw + byte[] is encoded as 'S'. Instances of System.String are + converted to a UTF-8 binary representation, and then encoded + using tag 'S'. In order to force the use of tag 'x', instances + of this class must be used. + + + + + + Creates a new instance of the with null for its Bytes property. + + + + + Creates a new instance of the . + + The wrapped byte array, as decoded or as to be encoded. + + + + The wrapped byte array, as decoded or as to be encoded. + + + + Main entry point to the RabbitMQ .NET AMQP client + API. Constructs instances. + + + A simple example of connecting to a broker: + + + IConnectionFactory factory = new ConnectionFactory(); + // + // The next six lines are optional: + factory.UserName = ConnectionFactory.DefaultUser; + factory.Password = ConnectionFactory.DefaultPass; + factory.VirtualHost = ConnectionFactory.DefaultVHost; + factory.HostName = hostName; + factory.Port = AmqpTcpEndpoint.UseDefaultPort; + // + IConnection conn = factory.CreateConnection(); + // + IModel ch = conn.CreateModel(); + // + // ... use ch's IModel methods ... + // + ch.Close(Constants.ReplySuccess, "Closing the channel"); + conn.Close(Constants.ReplySuccess, "Closing the connection"); + + + The same example, written more compactly with AMQP URIs: + + + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = "amqp://localhost"; + IConnection conn = factory.CreateConnection(); + ... + + + Please see also the API overview and tutorial in the User Guide. + + + Note that the Uri property takes a string representation of an + AMQP URI. Omitted URI parts will take default values. The + host part of the URI cannot be omitted and URIs of the form + "amqp://foo/" (note the trailling slash) also represent the + default virtual host. The latter issue means that virtual + hosts with an empty name are not addressable. + + + + Set custom socket options by providing a SocketFactory. + + + + + Creates a new instance of the . + + Specifies the addressing scheme. + New instance of a . + + + + Given a list of mechanism names supported by the server, select a preferred mechanism, + or null if we have none in common. + + + + + Create a connection to the specified endpoint. + + + + + Create a connection to the specified endpoint. + + /// Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + + Connects to the first reachable hostname from the list. + + List of host names to use + + + + + Connects to the first reachable hostname from the list. + + List of host names to use + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + + Dictionary of client properties to be sent to the server. + + + + + Password to use when authenticating to the server. + + + + + Maximum channel number to ask for. + + + + + Frame-max parameter to ask for (in bytes). + + + + + Heartbeat setting to request (in seconds). + + + + + When set to true, background threads will be used for I/O and heartbeats. + + + + + Username to use when authenticating to the server. + + + + + Virtual host to access during this connection. + + + + + Advanced option. + + What task scheduler should consumer dispatcher use. + + + + + Amount of time protocol handshake operations are allowed to take before + timing out. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + Default value for the desired maximum channel number, with zero meaning unlimited (value: 0). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default value for connection attempt timeout, in milliseconds. + + + + + Default value for the desired maximum frame size, with zero meaning unlimited (value: 0). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default value for desired heartbeat interval, in seconds, with zero meaning none (value: 60). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default password (value: "guest"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default user name (value: "guest"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default virtual host (value: "/"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default SASL auth mechanisms to use. + + + + + SASL auth mechanisms to use. + + + + + Set to true to enable automatic connection recovery. + + + + + Used to select next hostname to try when performing + connection recovery (re-connecting). Is not used for + non-recovering connections. + + + + The host to connect to. + + + + Amount of time client will wait for before re-trying to recover connection. + + + + + The port to connect on. + indicates the default for the protocol should be used. + + + + + Protocol used, only AMQP 0-9-1 is supported in modern versions. + + + + + Timeout setting for connection attempts (in milliseconds). + + + + + Timeout setting for socket read operations (in milliseconds). + + + + + Timeout setting for socket write operations (in milliseconds). + + + + + Ssl options setting. + + + + + Set to true to make automatic connection recovery also recover topology (exchanges, queues, bindings, etc). + + + + + Construct a fresh instance, with all fields set to their respective defaults. + + + + + Given a list of mechanism names supported by the server, select a preferred mechanism, + or null if we have none in common. + + + + + Create a connection to the specified endpoint. + + + When the configured hostname was not reachable. + + + + + Create a connection to the specified endpoint. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + When the configured hostname was not reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of hostnames to use for the initial + connection and recovery. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of hostnames to use for the initial + connection and recovery. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of endpoints to use for the initial + connection and recovery. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of endpoints to use for the initial + connection and recovery. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + Open connection + + When no hostname was reachable. + + + + + Unescape a string, protecting '+'. + + + + + Amount of time protocol handshake operations are allowed to take before + timing out. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + Task scheduler connections created by this factory will use when + dispatching consumer operations, such as message deliveries. + + + + + Connection endpoint. + + + + + Set connection parameters using the amqp or amqps scheme. + + + + + Set connection parameters using the amqp or amqps scheme. + + + + + Dictionary of client properties to be sent to the server. + + + + + Password to use when authenticating to the server. + + + + + Maximum channel number to ask for. + + + + + Frame-max parameter to ask for (in bytes). + + + + + Heartbeat timeout to use when negotiating with the server (in seconds). + + + + + When set to true, background thread will be used for the I/O loop. + + + + + Username to use when authenticating to the server. + + + + + Virtual host to access during this connection. + + + + + Useful default/base implementation of . + Subclass and override in application code. + + + Note that the "Handle*" methods run in the connection's thread! + Consider using , which exposes + events that can be subscribed to consumer messages. + + + + Consumer interface. Used to + receive messages from a queue by subscription. + + + See IModel.BasicConsume, IModel.BasicCancel. + + + Note that the "Handle*" methods run in the connection's + thread! Consider using QueueingBasicConsumer, which uses a + SharedQueue instance to safely pass received messages across + to user threads. + + + + + + Called when the consumer is cancelled for reasons other than by a basicCancel: + e.g. the queue has been deleted (either by this channel or by any other channel). + See for notification of consumer cancellation due to basicCancel + + Consumer tag this consumer is registered. + + + + Called upon successful deregistration of the consumer from the broker. + + Consumer tag this consumer is registered. + + + + Called upon successful registration of the consumer with the broker. + + Consumer tag this consumer is registered. + + + + Called each time a message arrives for this consumer. + + + Does nothing with the passed in information. + Note that in particular, some delivered messages may require acknowledgement via . + The implementation of this method in this class does NOT acknowledge such messages. + + + + + Called when the model shuts down. + + Common AMQP model. + Information about the reason why a particular model, session, or connection was destroyed. + + + + Retrieve the this consumer is associated with, + for use in acknowledging received messages, for instance. + + + + + Signalled when the consumer gets cancelled. + + + + + Creates a new instance of an . + + + + + Constructor which sets the Model property to the given value. + + Common AMQP model. + + + + Called when the consumer is cancelled for reasons other than by a basicCancel: + e.g. the queue has been deleted (either by this channel or by any other channel). + See for notification of consumer cancellation due to basicCancel + + Consumer tag this consumer is registered. + + + + Called upon successful deregistration of the consumer from the broker. + + Consumer tag this consumer is registered. + + + + Called upon successful registration of the consumer with the broker. + + Consumer tag this consumer is registered. + + + + Called each time a message arrives for this consumer. + + + Does nothing with the passed in information. + Note that in particular, some delivered messages may require acknowledgement via . + The implementation of this method in this class does NOT acknowledge such messages. + + + + + Called when the model shuts down. + + Common AMQP model. + Information about the reason why a particular model, session, or connection was destroyed. + + + + Default implementation - overridable in subclasses. + + This default implementation simply sets the + property to false, and takes no further action. + + + + + Retrieve the consumer tag this consumer is registered as; to be used when discussing this consumer + with the server, for instance with . + + + + + Returns true while the consumer is registered and expecting deliveries from the broker. + + + + + If our shuts down, this property will contain a description of the reason for the + shutdown. Otherwise it will contain null. See . + + + + + Signalled when the consumer gets cancelled. + + + + + Retrieve the this consumer is associated with, + for use in acknowledging received messages, for instance. + + + + + Convenience class providing compile-time names for standard headers. + + + Use the static members of this class as headers for the + arguments for Queue and Exchange declaration or Consumer creation. + The broker may be extended with additional + headers that do not appear in this class. + + + + + x-max-priority header + + + + + x-max-length header + + + + + x-max-length-bytes header + + + + + x-dead-letter-exchange header + + + + + x-dead-letter-routing-key header + + + + + x-message-ttl header + + + + + x-expires header + + + + + alternate-exchange header + + + + + x-priority header + + + + + Convenience class providing compile-time names for standard exchange types. + + + Use the static members of this class as values for the + "exchangeType" arguments for IModel methods such as + ExchangeDeclare. The broker may be extended with additional + exchange types that do not appear in this class. + + + + + Exchange type used for AMQP direct exchanges. + + + + + Exchange type used for AMQP fanout exchanges. + + + + + Exchange type used for AMQP headers exchanges. + + + + + Exchange type used for AMQP topic exchanges. + + + + + Retrieve a collection containing all standard exchange types. + + + + + Handle one round of challenge-response. + + + + + Return a new authentication mechanism implementation. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Main interface to an AMQP connection. + + + + Instances of are used to create fresh + sessions/channels. The class is used to + construct instances. + Please see the documentation for ConnectionFactory for an example of usage. + Alternatively, an API tutorial can be found in the User Guide. + + + Extends the interface, so that the "using" + statement can be used to scope the lifetime of a channel when + appropriate. + + + + + + Common interface for network (TCP/IP) connection classes. + + + + + Local port. + + + + + Remote port. + + + + + Abort this connection and all its channels. + + + Note that all active channels, sessions, and models will be closed if this method is called. + In comparison to normal method, will not throw + or during closing connection. + This method waits infinitely for the in-progress close operation to complete. + + + + + Abort this connection and all its channels. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the connection + + + + + + Abort this connection and all its channels and wait with a + timeout for all the in-progress close operations to complete. + + + This method, behaves in a similar way as method with the + only difference that it explictly specifies the timeout given + for all the in-progress close operations to complete. + If timeout is reached and the close operations haven't finished, then socket is forced to close. + + To wait infinitely for the close operations to complete use . + + + + + + Abort this connection and all its channels and wait with a + timeout for all the in-progress close operations to complete. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Close this connection and all its channels. + + + Note that all active channels, sessions, and models will be + closed if this method is called. It will wait for the in-progress + close operation to complete. This method will not return to the caller + until the shutdown is complete. If the connection is already closed + (or closing), then this method will throw . + It can also throw when socket was closed unexpectedly. + + + + + Close this connection and all its channels. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Close this connection and all its channels + and wait with a timeout for all the in-progress close operations to complete. + + + Note that all active channels, sessions, and models will be + closed if this method is called. It will wait for the in-progress + close operation to complete with a timeout. If the connection is + already closed (or closing), then this method will throw . + It can also throw when socket was closed unexpectedly. + If timeout is reached and the close operations haven't finished, then socket is forced to close. + + To wait infinitely for the close operations to complete use . + + + + + + Close this connection and all its channels + and wait with a timeout for all the in-progress close operations to complete. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Create and return a fresh channel, session, and model. + + + + + Handle incoming Connection.Blocked methods. + + + + + Handle incoming Connection.Unblocked methods. + + + + + If true, will close the whole connection as soon as there are no channels open on it; + if false, manual connection closure will be required. + + + DON'T set AutoClose to true before opening the first + channel, because the connection will be immediately closed if you do! + + + + + The maximum channel number this connection supports (0 if unlimited). + Usable channel numbers range from 1 to this number, inclusive. + + + + + A copy of the client properties that has been sent to the server. + + + + + Returns null if the connection is still in a state + where it can be used, or the cause of its closure otherwise. + + + + Applications should use the ConnectionShutdown event to + avoid race conditions. The scenario to avoid is checking + , seeing it is null (meaning the + was available for use at the time of the check), and + interpreting this mistakenly as a guarantee that the + will remain usable for a time. Instead, the + operation of interest should simply be attempted: if the + is not in a usable state, an exception will be + thrown (most likely , but may + vary depending on the particular operation being attempted). + + + + + + Retrieve the endpoint this connection is connected to. + + + + + The maximum frame size this connection supports (0 if unlimited). + + + + + The current heartbeat setting for this connection (0 for disabled), in seconds. + + + + + Returns true if the connection is still in a state where it can be used. + Identical to checking if equal null. + + + + + Returns the known hosts that came back from the + broker in the connection.open-ok method at connection + startup time. Null until the connection is completely open and ready for use. + + + + + The this connection is using to communicate with its peer. + + + + + A dictionary of the server properties sent by the server while establishing the connection. + This typically includes the product name and version of the server. + + + + + Returns the list of objects that contain information + about any errors reported while closing the connection in the order they appeared + + + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + Signalled when an exception occurs in a callback invoked by the connection. + + + This event is signalled when a ConnectionShutdown handler + throws an exception. If, in future, more events appear on + , then this event will be signalled whenever one + of those event handlers throws an exception, as well. + + + + + Raised when the connection is destroyed. + + + If the connection is already destroyed at the time an + event handler is added to this event, the event handler + will be fired immediately. + + + + + Picks a hostname from a list of options that should be used + by . + + + + + + + + Common AMQP Stream content-class headers interface, + spanning the union of the functionality offered by versions 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + + The specification code generator provides + protocol-version-specific implementations of this interface. To + obtain an implementation of this interface in a + protocol-version-neutral way, use IModel.CreateStreamProperties(). + + + Each property is readable, writable and clearable: a cleared + property will not be transmitted over the wire. Properties on a fresh instance are clear by default. + + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Message header field table. + + + + + Message priority, 0 to 9. + + + + + Message timestamp. + + + + + Wrapper interface for standard TCP-client. Provides socket for socket frame handler class. + + Contains all methods that are currenty in use in rabbitmq client. + + + + Return a new authentication mechanism implementation. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Provides access to the supported implementations. + + + + + Protocol version 0-9-1 as modified by Pivotal. + + + + + Retrieve the current default protocol variant (currently AMQP_0_9_1). + + + + + Container for an exchange name, exchange type and + routing key, usable as the target address of a message to be published. + + + + The syntax used for the external representation of instances + of this class is compatible with QPid's "Reply-To" field + pseudo-URI format. The pseudo-URI format is + (exchange-type)://(exchange-name)/(routing-key), where + exchange-type is one of the permitted exchange type names (see + class ExchangeType), exchange-name must be present but may be + empty, and routing-key must be present but may be empty. + + + The syntax is as it is solely for compatibility with QPid's + existing usage of the ReplyTo field; the AMQP specifications + 0-8 and 0-9 do not define the format of the field, and do not + define any format for the triple (exchange name, exchange + type, routing key) that could be used instead. Please see also + the way class RabbitMQ.Client.MessagePatterns.SimpleRpcServer + uses the ReplyTo field. + + + + + + Regular expression used to extract the exchange-type, + exchange-name and routing-key from a string. + + + + + Creates a new instance of the . + + Exchange type. + Exchange name. + Routing key. + + + + Parse a out of the given string, + using the regex. + + + + + Reconstruct the "uri" from its constituents. + + + + + Retrieve the exchange name. + + + + + Retrieve the exchange type string. + + + + + Retrieve the routing key. + + + + + Represents Queue info. + + + + + Creates a new instance of the . + + Queue name. + Message count. + Consumer count. + + + + Consumer count. + + + + + Message count. + + + + + Queue name. + + + + + A implementation that + uses a to buffer incoming deliveries. + + + + Received messages are placed in the SharedQueue as instances + of . + + + Note that messages taken from the SharedQueue may need + acknowledging with . + + + When the consumer is closed, through BasicCancel or through + the shutdown of the underlying or , + the method is called, which causes any + Enqueue() operations, and Dequeue() operations when the queue + is empty, to throw EndOfStreamException (see the comment for ). + + + The following is a simple example of the usage of this class: + + + IModel channel = ...; + QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); + channel.BasicConsume(queueName, null, consumer); + + // At this point, messages will be being asynchronously delivered, + // and will be queueing up in consumer.Queue. + + while (true) { + try { + BasicDeliverEventArgs e = (BasicDeliverEventArgs) consumer.Queue.Dequeue(); + // ... handle the delivery ... + channel.BasicAck(e.DeliveryTag, false); + } catch (EndOfStreamException ex) { + // The consumer was cancelled, the model closed, or the + // connection went away. + break; + } + } + + + + + + Creates a fresh , + initialising the property to null + and the property to a fresh . + + + + + Creates a fresh , with + set to the argument, and set to a fresh . + + + + + Creates a fresh , + initialising the + and properties to the given values. + + + + + Overrides 's implementation, + building a instance and placing it in the Queue. + + + + + Overrides 's OnCancel implementation, + extending it to call the Close() method of the . + + + + + Retrieves the that messages arrive on. + + + + + Information about the reason why a particular model, session, or connection was destroyed. + + + The and properties should be used to determine the originator of the shutdown event. + + + + + Construct a with the given parameters and + 0 for and . + + + + + Construct a with the given parameters. + + + + + Override ToString to be useful for debugging. + + + + + Object causing the shutdown, or null if none. + + + + + AMQP content-class ID, or 0 if none. + + + + + Returns the source of the shutdown event: either the application, the library, or the remote peer. + + + + + AMQP method ID within a content-class, or 0 if none. + + + + + One of the standardised AMQP reason codes. See RabbitMQ.Client.Framing.*.Constants. + + + + + Informative human-readable reason text. + + + + + Describes the source of a shutdown event. + + + + + The shutdown event originated from the application using the RabbitMQ .NET client library. + + + + + The shutdown event originated from the RabbitMQ .NET client library itself. + + + Shutdowns with this ShutdownInitiator code may appear if, + for example, an internal error is detected by the client, + or if the server sends a syntactically invalid + frame. Another potential use is on IConnection AutoClose. + + + + + The shutdown event originated from the remote AMQP peer. + + + A valid received connection.close or channel.close event + will manifest as a shutdown with this ShutdownInitiator. + + + + + Single entry object in the shutdown report that encapsulates description + of the error which occured during shutdown. + + + + + Description provided in the error. + + + + + object that occured during shutdown, or null if unspecified. + + + + + Represents an which does the actual heavy lifting to set up an SSL connection, + using the config options in an to make things cleaner. + + + + + Upgrade a Tcp stream to an Ssl stream using the SSL options provided. + + + + + Represents a configurable SSL option, used in setting up an SSL connection. + + + + + Constructs an SslOption specifying both the server cannonical name and the client's certificate path. + + + + + Constructs an with no parameters set. + + + + + Retrieve or set the set of ssl policy errors that are deemed acceptable. + + + + + Retrieve or set the path to client certificate. + + + + + Retrieve or set the path to client certificate. + + + + + An optional client specified SSL certificate selection callback. If this is not specified, + the first valid certificate found will be used. + + + + + An optional client specified SSL certificate validation callback. If this is not specified, + the default callback will be used in conjunction with the property to + determine if the remote server certificate is valid. + + + + + Retrieve or set the X509CertificateCollection containing the client certificate. + If no collection is set, the client will attempt to load one from the specified . + + + + + Flag specifying if Ssl should indeed be used. + + + + + Retrieve or set server's Canonical Name. + This MUST match the CN on the Certificate else the SSL connection will fail. + + + + + Retrieve or set the Ssl protocol version. + + + + + Framework for constructing various types of AMQP. Basic-class application messages. + + + + + Interface for constructing application messages. + + + Subinterfaces provide specialized data-writing methods. This + base interface deals with the lowest common denominator: + bytes, with no special encodings for higher-level objects. + + + + + Finish and retrieve the content body for transmission. + + + + + Finish and retrieve the content header for transmission. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Write a single byte into the message body, without encoding or interpretation. + + + + + Write a byte array into the message body, without encoding or interpretation. + + + + + Write a section of a byte array into the message body, without encoding or interpretation. + + + + + Retrieve the being used to construct the message body. + + + + + Retrieves the dictionary that will be used to construct the message header table. + It is of type . + + + + + By default, new instances of BasicMessageBuilder and its subclasses will have this much initial buffer space. + + + + + Construct an instance ready for writing. + + + The is used for the initial accumulator buffer size. + + + + + Construct an instance ready for writing. + + + + + Finish and retrieve the content body for transmission. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Write a single byte into the message body, without encoding or interpretation. + + + + + Write a byte array into the message body, without encoding or interpretation. + + + + + Write a section of a byte array into the message body, without encoding or interpretation. + + + + + Retrieve the associated with this instance. + + + + + Retrieve this instance's writing to BodyStream. + + + If no instance exists, one is created, + pointing at the beginning of the accumulator. If one + already exists, the existing instance is returned. The + instance is not reset. + + + + + Retrieve the being used to construct the message body. + + + + + Retrieves the dictionary that will be used to construct the message header table. + It is of type . + + + + + Framework for analyzing various types of AMQP Basic-class application messages. + + + + + Interface for analyzing application messages. + + + Subinterfaces provide specialized data-reading methods. This + base interface deals with the lowest common denominator: + bytes, with no special encodings for higher-level objects. + + + + + Read a single byte from the body stream, without encoding or interpretation. + Returns -1 for end-of-stream. + + + + + Read bytes from the body stream into a section of + an existing byte array, without encoding or + interpretation. Returns the number of bytes read from the + body and written into the target array, which may be less + than the number requested if the end-of-stream is reached. + + + + + Retrieve the message body, as a byte array. + + + + + Retrieve the being used to read from the message body. + + + + + Retrieves the content header properties of the message being read. Is of type . + + + + + Construct an instance ready for reading. + + + + + Read a single byte from the body stream, without encoding or interpretation. + Returns -1 for end-of-stream. + + + + + Read bytes from the body stream into a section of + an existing byte array, without encoding or + interpretation. Returns the number of bytes read from the + body and written into the target array, which may be less + than the number requested if the end-of-stream is reached. + + + + + Retrieve the associated with this instance. + + + + + Retrieve this instance's NetworkBinaryReader reading from . + + + If no NetworkBinaryReader instance exists, one is created, + pointing at the beginning of the body. If one already + exists, the existing instance is returned. The instance is + not reset. + + + + + Retrieve the message body, as a byte array. + + + + + Retrieve the being used to read from the message body. + + + + + Retrieves the content header properties of the message being read. Is of type . + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Interface for constructing messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Write a section of a byte array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Write a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + MIME type associated with QPid BytesMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Write a section of a byte array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Write a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Analyzes messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Reads a given number ("count") of bytes from the message body, + placing them into "target", starting at "offset". + + + + + Reads a from the message body. + + + + + Reads a given number of bytes from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + MIME type associated with QPid BytesMessages. + + + + + Construct an instance for reading. See . + + + + + Reads a given number ("count") of bytes from the message body, + placing them into "target", starting at "offset". + + + + + Reads a from the message body. + + + + + Reads a given number of bytes from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Interface for constructing messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + Retrieves the dictionary that will be written into the body of the message. + + + + + Analyzes messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + Parses the message body into an instance. + + + + + Interface for constructing messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a section of a byte array into the message body being assembled. + + + + + Writes a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + The only permitted types are bool, int, short, byte, char, + long, float, double, byte[] and string. + + + + + Writes objects using WriteObject(), one after the other. No length indicator is written. + See also . + + + + + Writes a value into the message body being assembled. + + + + + Writes a string value into the message body being assembled. + + + + + Analyzes messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a array from the message body. + The body contains information about the size of the array to read. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads array from the message body until the end-of-stream is reached. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + MIME type associated with QPid MapMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Finish and retrieve the content body for transmission. + + + Calling this message clears Body to null. Subsequent calls will fault. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Retrieves the dictionary that will be written into the body of the message. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + MIME type associated with QPid MapMessages. + + + + + Construct an instance for reading. See . + + + + + Parses the message body into an instance. + + . + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "MapMessage" wire encoding. + + + + + + Utility class for extracting typed values from strings. + + + + + Creates the protocol violation exception. + + Type of the target. + The source. + Instance of the . + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of an . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + MIME type associated with QPid StreamMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a section of a byte array into the message body being assembled. + + + + + Writes a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + The only permitted types are bool, int, short, byte, char, + long, float, double, byte[] and string. + + + + + Writes objects using WriteObject(), one after the other. No length indicator is written. + See also . + + + + + Writes a value into the message body being assembled. + + + + + Writes a string value into the message body being assembled. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + MIME type associated with QPid StreamMessages. + + + + + Construct an instance for reading. See . + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a array from the message body. + The body contains information about the size of the array to read. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads array from the message body until the end-of-stream is reached. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Tags used in parsing and generating StreamWireFormatting message bodies. + + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + + + + + + + + + + Contains all the information about a message acknowledged + from an AMQP broker within the Basic content-class. + + + The sequence number of the acknowledged message, or + the closed upper bound of acknowledged messages if multiple + is true. + + + Whether this acknoledgement applies to one message + or multiple messages. + + + Contains all the information about a message delivered + from an AMQP broker within the Basic content-class. + + + Default constructor. + + + Constructor that fills the event's properties from + its arguments. + + + The content header of the message. + + + The message body. + + + The consumer tag of the consumer that the message + was delivered to. + + + The delivery tag for this delivery. See + IModel.BasicAck. + + + The exchange the message was originally published + to. + + + The AMQP "redelivered" flag. + + + The routing key used when the message was + originally published. + + + Contains all the information about a message nack'd + from an AMQP broker within the Basic content-class. + + + The sequence number of the nack'd message, or the + closed upper bound of nack'd messages if multiple is + true. + + + Whether this nack applies to one message or + multiple messages. + + + Ignore + Clients should ignore this field. + + + Contains all the information about a message returned + from an AMQP broker within the Basic content-class. + + + The content header of the message. + + + The message body. + + + The exchange the returned message was originally + published to. + + + The AMQP reason code for the return. See + RabbitMQ.Client.Framing.*.Constants. + + + Human-readable text from the broker describing the + reason for the return. + + + The routing key used when the message was + originally published. + + + Wrap an exception thrown by a callback. + + + Access helpful information about the context in + which the wrapped exception was thrown. + + + Access the wrapped exception. + + + Describes an exception that was thrown during the + library's invocation of an application-supplied callback + handler. + + + When an exception is thrown from a callback registered with + part of the RabbitMQ .NET client library, it is caught, + packaged into a CallbackExceptionEventArgs, and passed through + the appropriate IModel's or IConnection's CallbackException + event handlers. If an exception is thrown in a + CallbackException handler, it is silently swallowed, as + CallbackException is the last chance to handle these kinds of + exception. + + + Code constructing CallbackExceptionEventArgs instances will + usually place helpful information about the context of the + call in the IDictionary available through the Detail property. + + + + + + Event relating to connection being blocked. + + + + + Access the reason why connection is blocked. + + + + Event relating to a successful consumer registration + or cancellation. + + + Construct an event containing the consumer-tag of + the consumer the event relates to. + + + Access the consumer-tag of the consumer the event + relates to. + + + + Initializes a new instance of the class. + + The tag before. + The tag after. + + + + Gets the tag before. + + + + + Gets the tag after. + + + + Experimental class exposing an IBasicConsumer's + methods as separate events. + + + Constructor which sets the Model property to the + given value. + + + Fires the Unregistered event. + + + Fires the Registered event. + + + Fires the Received event. + + + Fires the Shutdown event. + + + Event fired on HandleBasicDeliver. + + + Event fired on HandleBasicConsumeOk. + + + Event fired on HandleModelShutdown. + + + Event fired on HandleBasicCancelOk. + + + + Event relating to flow control. + + + + + Access the flow control setting. + + + + + Initializes a new instance of the class. + + The name before. + The name after. + + + + Gets the name before. + + + + + Gets the name after. + + + + + Describes an exception that was thrown during + automatic connection recovery performed by the library. + + + + Thrown when the application tries to make use of a + session or connection that has already been shut + down. + + + + Thrown when a session is destroyed during an RPC call to a + broker. For example, if a TCP connection dropping causes the + destruction of a session in the middle of a QueueDeclare + operation, an OperationInterruptedException will be thrown to + the caller of IModel.QueueDeclare. + + + + Construct an OperationInterruptedException with + the passed-in explanation, if any. + + + Construct an OperationInterruptedException with + the passed-in explanation and prefix, if any. + + + Retrieves the explanation for the shutdown. May + return null if no explanation is available. + + + Construct an instance containing the given + shutdown reason. + + + Thrown when the cause is an + authentication failure. + + + Thrown when the likely cause is an + authentication failure. + + + Thrown when no connection could be opened during a + ConnectionFactory.CreateConnection attempt. + + + Construct a BrokerUnreachableException. The inner exception is associated + with only one connection attempt. + + + Thrown when a SessionManager cannot allocate a new + channel number, or the requested channel number is already in + use. + + + + Indicates that there are no more free channels. + + + + + Indicates that the specified channel is in use + + The requested channel number + + + Retrieves the channel number concerned; will + return -1 in the case where "no more free channels" is + being signalled, or a non-negative integer when "channel is + in use" is being signalled. + + + Thrown when a connection to the broker fails + + + Thrown to indicate that the peer didn't understand + the packet received from the client. Peer sent default message + describing protocol version it is using and transport parameters. + + + The peer's {'A','M','Q','P',txHi,txLo,major,minor} packet is + decoded into instances of this class. + + + + Fills the new instance's properties with the values passed in. + + + The peer's AMQP specification major version. + + + The peer's AMQP specification minor version. + + + The peer's high transport byte. + + + The peer's low transport byte. + + + Thrown to indicate that the peer does not support the + wire protocol version we requested immediately after opening + the TCP socket. + + + Fills the new instance's properties with the values passed in. + + + The client's AMQP specification major version. + + + The client's AMQP specification minor version. + + + The peer's AMQP specification major version. + + + The peer's AMQP specification minor version. + + + + Thrown when the model receives an RPC reply that it wasn't expecting. + + + + The unexpected reply method. + + + + Thrown when the model receives an RPC request it cannot satisfy. + + + + The name of the RPC request that could not be sent. + + + Thrown when the model cannot transmit a method field + because the version of the protocol the model is implementing + does not contain a definition for the field in + question. + + + The name of the unsupported field. + + + The name of the method involved. + + + Thrown when the wire-formatting code cannot encode a + particular .NET value to AMQP protocol format. + + + Construct a WireFormattingException with no + particular offender (i.e. null) + + + Construct a WireFormattingException with the given + offender + + + Object which this exception is complaining about; + may be null if no particular offender exists + + + API-side invocation of connection abort. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close with timeout. + + + API-side invocation of connection.close with timeout. + + + Thrown when the server sends a frame along a channel + that we do not currently have a Session entry in our + SessionManager for. + + + Subclass of ProtocolException representing problems + requiring a connection.close. + + + Instances of subclasses of subclasses + HardProtocolException and SoftProtocolException are thrown in + situations when we detect a problem with the connection-, + channel- or wire-level parts of the AMQP protocol. + + + Retrieve the reply code to use in a + connection/channel close method. + + + Retrieve the shutdown details to use in a + connection/channel close method. Defaults to using + ShutdownInitiator.Library, and this.ReplyCode and + this.Message as the reply code and text, + respectively. + + + The channel number concerned. + + + Heartbeat frame for transmission. Reusable across connections. + + + Try to close connection in a graceful way + + + Shutdown reason contains code and text assigned when closing the connection, + as well as the information about what initiated the close + + + Abort flag, if true, signals to close the ongoing connection immediately + and do not report any errors if it was already closed. + + + Timeout determines how much time internal close operations should be given + to complete. Negative or Timeout.Infinite value mean infinity. + + + + + + Loop only used while quiescing. Use only to cleanly close connection + + + + + We need to close the socket, otherwise attempting to unload the domain + could cause a CannotUnloadAppDomainException + + + + Broadcasts notification of the final shutdown of the connection. + + + + Sets the channel named in the SoftProtocolException into + "quiescing mode", where we issue a channel.close and + ignore everything except for subsequent channel.close + messages and the channel.close-ok reply that should + eventually arrive. + + + + Since a well-behaved peer will not wait indefinitely before + issuing the close-ok, we don't bother with a timeout here; + compare this to the case of a connection.close-ok, where a + timeout is necessary. + + + We need to send the close method and politely wait for a + reply before marking the channel as available for reuse. + + + As soon as SoftProtocolException is detected, we should stop + servicing ordinary application work, and should concentrate + on bringing down the channel as quickly and gracefully as + possible. The way this is done, as per the close-protocol, + is to signal closure up the stack *before* sending the + channel.close, by invoking ISession.Close. Once the upper + layers have been signalled, we are free to do what we need + to do to clean up and shut down the channel. + + + + + + May be called more than once. Should therefore be idempotent. + + + + API-side invocation of connection abort. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close with timeout. + + + API-side invocation of connection.close with timeout. + + + Another overload of a Protocol property, useful + for exposing a tighter type. + + + Explicit implementation of IConnection.Protocol. + + + A type of . + + + + Returns a random item from the list. + + Element item type + Input list + + + + Read a frame from the underlying + transport. Returns null if the read operation timed out + (see Timeout property). + + + Socket read timeout, in milliseconds. Zero signals "infinity". + + + Socket write timeout, in milliseconds. Zero signals "infinity". + + + Essential information from an incoming Connection.Tune + method. + + + The peer's suggested channel-max parameter. + + + The peer's suggested frame-max parameter. + + + The peer's suggested heartbeat parameter. + + + Base class for attributes for controlling the API + autogeneration process. + + + The specification namespace (i.e. version) that + this attribute applies to, or null for all specification + versions. + + + Causes the API generator to ignore the attributed method. + + Mostly used to declare convenience overloads of + various AMQP methods in the IModel interface. Also used + to omit an autogenerated implementation of a method which + is not required for one protocol version. The API + autogeneration process should of course not attempt to produce + an implementation of the convenience methods, as they will be + implemented by hand with sensible defaults, delegating to the + autogenerated variant of the method concerned. + + + Causes the API generator to generate asynchronous + receive code for the attributed method. + + + Causes the API generator to generate + exception-throwing code for, instead of simply ignoring, the + attributed method. + + + + + Informs the API generator which AMQP method field to + use for either a parameter in a request, or for a simple result + in a reply. + + + Informs the API generator which AMQP method to use for + either a request (if applied to an IModel method) or a reply + (if applied to an IModel method result). + + + This attribute, if placed on a parameter in an IModel + method, causes it to be interpreted as a "nowait" parameter for + the purposes of autogenerated RPC reply continuation management + and control. + + + This attribute, if placed on a method in IModel, + causes the method to be interpreted as a factory method + producing a protocol-specific implementation of a common + content header interface. + + + This attribute, if placed on a parameter in a + content-carrying IModel method, causes it to be sent as part of + the content header frame. + + + This attribute, if placed on a parameter in a + content-carrying IModel method, causes it to be sent as part of + the content body frame. + + + This attribute, placed on an IModel method, causes + what would normally be an RPC, sent with ModelRpc, to be sent + as if it were oneway, with ModelSend. The assumption that this + is for a custom continuation (e.g. for BasicConsume/BasicCancel + etc.) + + + + Gets the channel number. + + + + + Gets the close reason. + + + + + Single recipient - no need for multiple handlers to be informed of arriving commands. + + + + + Gets the connection. + + + + + Gets a value indicating whether this session is open. + + + + + Multicast session shutdown event. + + + + Small ISession implementation used only for channel 0. + + + Normal ISession implementation used during normal channel operation. + + + Set channel 0 as quiescing + + Method should be idempotent. Cannot use base.Close + method call because that would prevent us from + sending/receiving Close/CloseOk commands + + + + Thrown when frame parsing code detects an error in the + wire-protocol encoding of a frame. + + For example, potential MalformedFrameException conditions + include frames too short, frames missing their end marker, and + invalid protocol negotiation headers. + + + + Small ISession implementation used during channel quiescing. + + + Manages a queue of waiting AMQP RPC requests. + + + Currently, pipelining of requests is forbidden by this + implementation. The AMQP 0-8 and 0-9 specifications themselves + forbid pipelining, but only by the skin of their teeth and + under a somewhat generous reading. + + + + + Enqueue a continuation, marking a pending RPC. + + + Continuations are retrieved in FIFO order by calling Next(). + + + In the current implementation, only one continuation can + be queued up at once. Calls to Enqueue() when a + continuation is already enqueued will result in + NotSupportedException being thrown. + + + + + Interrupt all waiting continuations. + + + There's just the one potential waiter in the current + implementation. + + + + + Retrieve the next waiting continuation. + + + It is an error to call this method when there are no + waiting continuations. In the current implementation, if + this happens, null will be returned (which will usually + result in an immediate NullPointerException in the + caller). Correct code will always arrange for a + continuation to have been Enqueue()d before calling this + method. + + + + + Called from CheckAutoClose, in a separate thread, + when we decide to close the connection. + + + If m_autoClose and there are no active sessions + remaining, Close()s the connection with reason code + 200. + + + Replace an active session slot with a new ISession + implementation. Used during channel quiescing. + + Make sure you pass in a channelNumber that's currently in + use, as if the slot is unused, you'll get a null pointer + exception. + + + + Subclass of ProtocolException representing problems + requiring a channel.close. + + + Thrown when our peer sends a frame that contains + illegal values for one or more fields. + + + + Simple wrapper around TcpClient. + + + + + TCP-Client with support for http tunnel through http proxy server + + + + + Constructor. + + Host name or IP address of the proxy server. + Port number to connect to the proxy server. + Username for the proxy server. + Password for the proxy server. + + + + Open TCP connection through HTTP-Tunnel. + + Method invokes method 'createConnection' asynchronously. + Destination host name or IP address. + Port number to connect to on the destination host. + Callback + + + + + + Creates a remote TCP connection through a proxy server to the destination host on the destination port. + + Destination host name or IP address. + Port number to connect to on the destination host. + AdressFamliy for tcp client. Currently ignored. + Dto for all container infos + + Returns an open TcpClient object that can be used normally to communicate + with the destination server + + + This method creates a connection to the proxy server and instructs the proxy server + to make a pass through connection to the specified destination host on the specified + port. + + + + + Container for proxy related information + + + + + Simple container for response message + + + + + Event arguments class for the EncryptAsyncCompleted event. + + + + + Constructor. + + Exception information generated by the event. + Cancelled event flag. This flag is set to true if the event was cancelled. + Proxy Connection. The initialized and open TcpClient proxy connection. + + + + The proxy connection. + + + + + This exception is thrown when a general, unexpected proxy error. + + + + + Constructor. + + + + + Constructor. + + Exception message text. + + + + Constructor. + + Exception message text. + The inner exception object. + + + + Constructor. + + Serialization information. + Stream context information. + + + + Collection of helper methods + + + + + Thrown when the connection receives a frame that it wasn't expecting. + + + + + Thrown when the protocol handlers detect an unknown class + number or method number. + + + + The AMQP content-class ID. + + + The AMQP method ID within the content-class, or 0 if none. + + + Reads an AMQP "table" definition from the reader. + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t, + x and V types and the AMQP 0-9-1 A type. + + A . + + + Writes an AMQP "table" to the writer. + + + In this method, we assume that the stream that backs our + NetworkBinaryWriter is a positionable stream - which it is + currently (see Frame.m_accumulator, Frame.GetWriter and + Command.Transmit). + + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t + x and V types and the AMQP 0-9-1 A type. + + + + + Writes an AMQP "table" to the writer. + + + In this method, we assume that the stream that backs our + NetworkBinaryWriter is a positionable stream - which it is + currently (see Frame.m_accumulator, Frame.GetWriter and + Command.Transmit). + + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t + x and V types and the AMQP 0-9-1 A type. + + + + + + Implements a simple RPC client. + + + This class sends requests that can be processed by remote + SimpleRpcServer instances. + + + The basic pattern for accessing a remote service is to + determine the exchange name and routing key needed for + submissions of service requests, and to construct a + SimpleRpcClient instance using that address. Once constructed, + the various Call() and Cast() overloads can be used to send + requests and receive the corresponding replies. + + + string queueName = "ServiceRequestQueue"; // See also Subscription ctors + using (IConnection conn = new ConnectionFactory() + .CreateConnection(serverAddress)) { + using (IModel ch = conn.CreateModel()) { + SimpleRpcClient client = + new SimpleRpcClient(ch, queueName); + client.TimeoutMilliseconds = 5000; // optional + + /// ... make use of the various Call() overloads + } + } + + + Instances of this class declare a queue, so it is the user's + responsibility to ensure that the exchange concerned exists + (using IModel.ExchangeDeclare) before invoking Call() or + Cast(). + + + This class implements only a few basic RPC message formats - + to extend it with support for more formats, either subclass, + or transcode the messages before transmission using the + built-in byte[] format. + + + + + + Construct an instance with no configured + Address. The Address property must be set before Call() or + Cast() are called. + + + Construct an instance that will deliver to the + default exchange (""), with routing key equal to the passed + in queueName, thereby delivering directly to a named queue + on the AMQP server. + + + Construct an instance that will deliver to the + named and typed exchange, with the given routing + key. + + + Construct an instance that will deliver to the + given address. + + + Sends a "jms/stream-message"-encoded RPC request, + and expects an RPC reply in the same format. + + + The arguments passed in must be of types that are + representable as JMS StreamMessage values, and so must the + results returned from the service in its reply message. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + + + Sends a simple byte[] message, without any custom + headers or properties. + + + Delegates directly to Call(IBasicProperties, byte[]), and + discards the properties of the received reply, returning + only the body of the reply. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + Sends a byte[] message and IBasicProperties + header, returning both the body and headers of the received + reply. + + + Sets the "replyProperties" outbound parameter to the + properties of the received reply, and returns the byte[] + body of the reply. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Both sets "replyProperties" to null and returns null when + either the request timed out or we were disconnected + before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + Sends a byte[]/IBasicProperties RPC request, + returning full information about the delivered reply as a + BasicDeliverEventArgs. + + + This is the most general/lowest-level Call()-style method + on SimpleRpcClient. It sets CorrelationId and ReplyTo on + the request message's headers before transmitting the + request to the service via the AMQP server. If the reply's + CorrelationId does not match the request's CorrelationId, + ProtocolViolationException will be thrown. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + + Sends an asynchronous/one-way message to the + service. + + + Close the reply subscription associated with this instance, if any. + + Simply delegates to calling Subscription.Close(). Clears + the Subscription property, so that subsequent Call()s, if + any, will re-initialize it to a fresh Subscription + instance. + + + + Signals that the Subscription we use for receiving + our RPC replies was disconnected while we were + waiting. + + Fires the Disconnected event. + + + + Signals that the configured timeout fired while + waiting for an RPC reply. + + Fires the TimedOut event. + + + + Implement the IDisposable interface, permitting + SimpleRpcClient instances to be used in using + statements. + + + Should initialise m_subscription to be non-null + and usable for fetching RPC replies from the service + through the AMQP server. + + + Retrieves the reply for the request with the given + correlation ID from our internal Subscription. + + Currently requires replies to arrive in the same order as + the requests were sent out. Subclasses may override this + to provide more sophisticated behaviour. + + + + This event is fired whenever Call() detects the + disconnection of the underlying Subscription while waiting + for a reply from the service. + + See also OnDisconnected(). Note that the sending of a + request may result in OperationInterruptedException before + the request is even sent. + + + + This event is fired whenever Call() decides that a + timeout has occurred while waiting for a reply from the + service. + + See also OnTimedOut(). + + + + Retrieve or modify the address that will be used + for the next Call() or Cast(). + + This address represents the service, i.e. the destination + service requests should be published to. It can be changed + at any time before a Call() or Cast() request is sent - + the value at the time of the call is used by Call() and + Cast(). + + + + Retrieve the IModel this instance uses to communicate. + + + Retrieve the Subscription that is used to receive + RPC replies corresponding to Call() RPC requests. May be + null. + + + Upon construction, this property will be null. It is + initialised by the protected virtual method + EnsureSubscription upon the first call to Call(). Calls to + Cast() do not initialise the subscription, since no + replies are expected or possible when using Cast(). + + + + + Retrieve or modify the timeout (in milliseconds) + that will be used for the next Call(). + + + This property defaults to + System.Threading.Timeout.Infinite (i.e. -1). If it is set + to any other value, Call() will only wait for the + specified amount of time before returning indicating a + timeout. + + + See also TimedOut event and OnTimedOut(). + + + + + Implements a simple RPC service, responding to + requests received via a Subscription. + + + This class interprets requests such as those sent by instances + of SimpleRpcClient. + + + The basic pattern for implementing a service is to subclass + SimpleRpcServer, overriding HandleCall and HandleCast as + appropriate, and then to create a Subscription object for + receiving requests from clients, and start an instance of the + SimpleRpcServer subclass with the Subscription. + + + string queueName = "ServiceRequestQueue"; // See also Subscription ctors + using (IConnection conn = new ConnectionFactory() + .CreateConnection(serverAddress)) { + using (IModel ch = conn.CreateModel()) { + Subscription sub = new Subscription(ch, queueName); + new MySimpleRpcServerSubclass(sub).MainLoop(); + } + } + + + Note that this class itself does not declare any resources + (exchanges, queues or bindings). The Subscription we use for + receiving RPC requests should have already declared all the + resources we need. See the Subscription constructors and the + Subscription.Bind method. + + + If you are implementing a service that responds to + "jms/stream-message"-formatted requests (as implemented by + RabbitMQ.Client.Content.IStreamMessageReader), override + HandleStreamMessageCall. Otherwise, override HandleSimpleCall + or HandleCall as appropriate. Asynchronous, one-way requests + are dealt with by HandleCast etc. + + + Every time a request is successfully received and processed + within the server's MainLoop, the request message is Ack()ed + using Subscription.Ack before the next request is + retrieved. This causes the Subscription object to take care of + acknowledging receipt and processing of the request message. + + + If transactional service is enabled, via SetTransactional(), + then after every successful ProcessRequest, IModel.TxCommit is + called. Making use of transactional service has effects on all + parts of the application that share an IModel instance, + completely changing the style of interaction with the AMQP + server. For this reason, it is initially disabled, and must be + explicitly enabled with a call to SetTransactional(). Please + see the documentation for SetTransactional() for details. + + + To stop a running RPC server, call Close(). This will in turn + Close() the Subscription, which will cause MainLoop() to + return to its caller. + + + Unless overridden, ProcessRequest examines properties in the + request content header, and uses them to dispatch to one of + the Handle[...]() methods. See the documentation for + ProcessRequest and each Handle[...] method for details. + + + + + + Create, but do not start, an instance that will + receive requests via the given Subscription. + + + The instance is initially in non-transactional mode. See + SetTransactional(). + + + Call MainLoop() to start the request-processing loop. + + + + + Shut down the server, causing MainLoop() to return + to its caller. + + Acts by calling Close() on the server's Subscription object. + + + + Called by ProcessRequest(), this is the most + general method that handles RPC-style requests. + + + This method should map requestProperties and body to + replyProperties and the returned byte array. + + + The default implementation checks + requestProperties.ContentType, and if it is + "jms/stream-message" (i.e. the current value of + StreamMessageBuilder.MimeType), parses it using + StreamMessageReader and delegates to + HandleStreamMessageCall before encoding and returning the + reply. If the ContentType is any other value, the request + is passed to HandleSimpleCall instead. + + + The isRedelivered flag is true when the server knows for + sure that it has tried to send this request previously + (although not necessarily to this application). It is not + a reliable indicator of previous receipt, however - the + only claim it makes is that a delivery attempt was made, + not that the attempt succeeded. Be careful if you choose + to use the isRedelivered flag. + + + + + Called by ProcessRequest(), this is the most + general method that handles asynchronous, one-way + requests. + + + The default implementation checks + requestProperties.ContentType, and if it is + "jms/stream-message" (i.e. the current value of + StreamMessageBuilder.MimeType), parses it using + StreamMessageReader and delegates to + HandleStreamMessageCall, passing in null as the + replyWriter parameter to indicate that no reply is desired + or possible. If the ContentType is any other value, the + request is passed to HandleSimpleCast instead. + + + The isRedelivered flag is true when the server knows for + sure that it has tried to send this request previously + (although not necessarily to this application). It is not + a reliable indicator of previous receipt, however - the + only claim it makes is that a delivery attempt was made, + not that the attempt succeeded. Be careful if you choose + to use the isRedelivered flag. + + + + + Called by the default HandleCall() implementation + as a fallback. + + If the MIME ContentType of the request did not match any + of the types specially recognised + (e.g. "jms/stream-message"), this method is called instead + with the raw bytes of the request. It should fill in + replyProperties (or set it to null) and return a byte + array to send back to the remote caller as a reply + message. + + + + Called by the default HandleCast() implementation + as a fallback. + + If the MIME ContentType of the request did not match any + of the types specially recognised + (e.g. "jms/stream-message"), this method is called instead + with the raw bytes of the request. + + + + Called by HandleCall and HandleCast when a + "jms/stream-message" request is received. + + + The args array contains the values decoded by HandleCall + or HandleCast. + + + The replyWriter parameter will be null if we were called + from HandleCast, in which case a reply is not expected or + possible, or non-null if we were called from + HandleCall. Use the methods of replyWriter in this case to + assemble your reply, which will be sent back to the remote + caller. + + + This default implementation does nothing, which + effectively sends back an empty reply to any and all + remote callers. + + + + + Enters the main loop of the RPC service. + + + Retrieves requests repeatedly from the service's + subscription. Each request is passed to + ProcessRequest. Once ProcessRequest returns, the request + is acknowledged via Subscription.Ack(). If transactional + mode is enabled, TxCommit is then called. Finally, the + loop begins again. + + + Runs until the subscription ends, which happens either as + a result of disconnection, or of a call to Close(). + + + + + Process a single request received from our + subscription. + + + If the request's properties contain a non-null, non-empty + CorrelationId string (see IBasicProperties), it is assumed + to be a two-way call, requiring a response. The ReplyTo + header property is used as the reply address (via + PublicationAddress.Parse, unless that fails, in which case it + is treated as a simple queue name), and the request is + passed to HandleCall(). + + + If the CorrelationId is absent or empty, the request is + treated as one-way asynchronous event, and is passed to + HandleCast(). + + + Usually, overriding HandleCall(), HandleCast(), or one of + their delegates is sufficient to implement a service, but + in some cases overriding ProcessRequest() is + required. Overriding ProcessRequest() gives the + opportunity to implement schemes for detecting interaction + patterns other than simple request/response or one-way + communication. + + + + + Enables transactional mode. + + + Once enabled, transactional mode is not only enabled for + all users of the underlying IModel instance, but cannot be + disabled without shutting down the entire IModel (which + involves shutting down all the services depending on it, + and should not be undertaken lightly). + + + This method calls IModel.TxSelect, every time it is + called. (TxSelect is idempotent, so this is harmless.) + + + + + Implement the IDisposable interface, permitting + SimpleRpcServer instances to be used in using + statements. + + + Returns true if we are in "transactional" mode, or + false if we are not. + + + Manages a subscription to a queue. + + + This convenience class abstracts away from much of the detail + involved in receiving messages from a queue. + + + Once created, the Subscription consumes from a queue (using a + EventingBasicConsumer). Received deliveries can be retrieved + by calling Next(), or by using the Subscription as an + IEnumerator in, for example, a foreach loop. + + + Note that if the "noAck" option is enabled (which it is by + default), then received deliveries are automatically acked + within the server before they are even transmitted across the + network to us. Calling Ack() on received events will always do + the right thing: if "noAck" is enabled, nothing is done on an + Ack() call, and if "noAck" is disabled, IModel.BasicAck() is + called with the correct parameters. + + + + + Creates a new Subscription in "noAck" mode, + consuming from a named queue. + + + Creates a new Subscription, with full control over + both "noAck" mode and the name of the queue. + + + Creates a new Subscription, with full control over + both "noAck" mode, the name of the queue, and the consumer tag. + + + If LatestEvent is non-null, passes it to + Ack(BasicDeliverEventArgs). Causes LatestEvent to become + null. + + + If we are not in "noAck" mode, calls + IModel.BasicAck with the delivery-tag from ; + otherwise, sends nothing to the server. if is the same as LatestEvent + by pointer comparison, sets LatestEvent to null. + + + Passing an event that did not originate with this Subscription's + channel, will lead to unpredictable behaviour + + + + Closes this Subscription, cancelling the consumer + record in the server. + + + If LatestEvent is non-null, passes it to + Nack(BasicDeliverEventArgs, false, requeue). Causes LatestEvent to become + null. + + + If LatestEvent is non-null, passes it to + Nack(BasicDeliverEventArgs, multiple, requeue). Causes LatestEvent to become + null. + + + If we are not in "noAck" mode, calls + IModel.BasicNack with the delivery-tag from ; + otherwise, sends nothing to the server. if is the same as LatestEvent + by pointer comparison, sets LatestEvent to null. + + + Passing an event that did not originate with this Subscription's + channel, will lead to unpredictable behaviour + + + + Retrieves the next incoming delivery in our + subscription queue. + + + Returns null when the end of the stream is reached and on + every subsequent call. End-of-stream can arise through the + action of the Subscription.Close() method, or through the + closure of the IModel or its underlying IConnection. + + + Updates LatestEvent to the value returned. + + + Does not acknowledge any deliveries at all (but in "noAck" + mode, the server will have auto-acknowledged each event + before it is even sent across the wire to us). + + + + + Retrieves the next incoming delivery in our + subscription queue, or times out after a specified number + of milliseconds. + + + Returns false only if the timeout expires before either a + delivery appears or the end-of-stream is reached. If false + is returned, the out parameter "result" is set to null, + but LatestEvent is not updated. + + + Returns true to indicate a delivery or the end-of-stream. + + + If a delivery is already waiting in the queue, or one + arrives before the timeout expires, it is removed from the + queue and placed in the "result" out parameter. If the + end-of-stream is detected before the timeout expires, + "result" is set to null. + + + Whenever this method returns true, it updates LatestEvent + to the value placed in "result" before returning. + + + End-of-stream can arise through the action of the + Subscription.Close() method, or through the closure of the + IModel or its underlying IConnection. + + + This method does not acknowledge any deliveries at all + (but in "noAck" mode, the server will have + auto-acknowledged each event before it is even sent across + the wire to us). + + + A timeout of -1 (i.e. System.Threading.Timeout.Infinite) + will be interpreted as a command to wait for an + indefinitely long period of time for an item or the end of + the stream to become available. Usage of such a timeout is + equivalent to calling Next() with no arguments (modulo + predictable method signature differences). + + + + + Implementation of the IDisposable interface, + permitting Subscription to be used in using + statements. Simply calls Close(). + + + Implementation of the IEnumerable interface, for + permitting Subscription to be used in foreach + loops. + + + Implementation of the IEnumerator interface, for + permitting Subscription to be used in foreach + loops. + + + Does not acknowledge any deliveries at all. Ack() must be + called explicitly on received deliveries. + + + + + Dummy implementation of the IEnumerator interface, + for permitting Subscription to be used in foreach loops; + Reset()ting a Subscription doesn't make sense, so this + method always throws InvalidOperationException. + + + Retrieve the IBasicConsumer that is receiving the + messages from the server for us. Normally, you will not + need to access this property - use Next() and friends + instead. + + + Retrieve the consumer-tag that this subscription + is using. Will usually be a server-generated + name. + + + Returns the most recent value returned by Next(), + or null when either no values have been retrieved yet, the + end of the subscription has been reached, or the most + recent value has already been Ack()ed. See also the + documentation for Ack(). + + + Retrieve the IModel our subscription is carried by. + + + Returns true if we are in "noAck" mode, where + calls to Ack() will be no-ops, and where the server acks + messages before they are delivered to us. Returns false if + we are in a mode where calls to Ack() are required, and + where such calls will actually send an acknowledgement + message across the network to the server. + + + Retrieve the queue name we have subscribed to. + + + Implementation of the IEnumerator interface, for + permitting Subscription to be used in foreach + loops. + + + As per the IEnumerator interface definition, throws + InvalidOperationException if LatestEvent is null. + + + Does not acknowledge any deliveries at all. Ack() must be + called explicitly on received deliveries. + + + + + A thread-safe single-assignment reference cell. + + A fresh BlockingCell holds no value (is empty). Any thread + reading the Value property when the cell is empty will block + until a value is made available by some other thread. The Value + property can only be set once - on the first call, the + BlockingCell is considered full, and made immutable. Further + attempts to set Value result in a thrown + InvalidOperationException. + + + + Return valid timeout value + If value of the parameter is less then zero, return 0 + to mean infinity + + + Retrieve the cell's value, waiting for the given + timeout if no value is immediately available. + + + If a value is present in the cell at the time the call is + made, the call will return immediately. Otherwise, the + calling thread blocks until either a value appears, or + operation times out. + + + If no value was available before the timeout, an exception + is thrown. + + + + + Retrieve the cell's value, waiting for the given + timeout if no value is immediately available. + + + If a value is present in the cell at the time the call is + made, the call will return immediately. Otherwise, the + calling thread blocks until either a value appears, or + operation times out. + + + If no value was available before the timeout, an exception + is thrown. + + + + + Retrieve the cell's value, blocking if none exists + at present, or supply a value to an empty cell, thereby + filling it. + + + + Miscellaneous debugging and development utilities. + + Not part of the public API. + + + + Print a hex dump of the supplied bytes to stdout. + + + Print a hex dump of the supplied bytes to the supplied TextWriter. + + + Prints an indented key/value pair; used by DumpProperties() + Recurses into the value using DumpProperties(). + + + Dump properties of objects to the supplied writer. + + + Used internally by class Either. + + + Models the disjoint union of two alternatives, a + "left" alternative and a "right" alternative. + Borrowed from ML, Haskell etc. + + + Private constructor. Use the static methods Left, Right instead. + + + Constructs an Either instance representing a Left alternative. + + + Constructs an Either instance representing a Right alternative. + + + Retrieve the alternative represented by this instance. + + + Retrieve the value carried by this instance. + + + A class for allocating integer IDs in a given range. + + + Creates an IntAllocator allocating integer IDs within the inclusive range [start, end] + + + Allocate a fresh integer from the range, or return -1 if no more integers + are available. This operation is guaranteed to run in O(1) + + + Make the provided integer available for allocation again. This operation + runs in amortized O(sqrt(range size)) time: About every sqrt(range size) + operations will take O(range_size + number of intervals) to complete and + the rest run in constant time. + + No error checking is performed, so if you double Free or Free an integer + that was not originally Allocated the results are undefined. Sorry. + + + + Subclass of BinaryReader that reads integers etc in correct network order. + + + + Kludge to compensate for .NET's broken little-endian-only BinaryReader. + Relies on BinaryReader always being little-endian. + + + + + + Construct a NetworkBinaryReader over the given input stream. + + + + + Construct a NetworkBinaryReader over the given input + stream, reading strings using the given encoding. + + + + Helper method for constructing a temporary + BinaryReader over a byte[]. + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Subclass of BinaryWriter that writes integers etc in correct network order. + + + +

+ Kludge to compensate for .NET's broken little-endian-only BinaryWriter. +

+ See also NetworkBinaryReader. +

+
+
+ + + Construct a NetworkBinaryWriter over the given input stream. + + + + + Construct a NetworkBinaryWriter over the given input + stream, reading strings using the given encoding. + + + + Helper method for constructing a temporary + BinaryWriter streaming into a fresh MemoryStream + provisioned with the given initialSize. + + + Helper method for extracting the byte[] contents + of a BinaryWriter over a MemoryStream, such as constructed + by TemporaryBinaryWriter. + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + A thread-safe shared queue implementation. + + + A thread-safe shared queue implementation. + + + Flag holding our current status. + + + The shared queue. + + Subclasses must ensure appropriate locking discipline when + accessing this field. See the implementation of Enqueue, + Dequeue. + + + + Close the queue. Causes all further Enqueue() + operations to throw EndOfStreamException, and all pending + or subsequent Dequeue() operations to throw an + EndOfStreamException once the queue is empty. + + + Retrieve the first item from the queue, or block if none available + + Callers of Dequeue() will block if no items are available + until some other thread calls Enqueue() or the queue is + closed. In the latter case this method will throw + EndOfStreamException. + + + + Retrieve the first item from the queue, or return + nothing if no items are available after the given + timeout + + + If one or more items are present on the queue at the time + the call is made, the call will return + immediately. Otherwise, the calling thread blocks until + either an item appears on the queue, or + millisecondsTimeout milliseconds have elapsed. + + + Returns true in the case that an item was available before + the timeout, in which case the out parameter "result" is + set to the item itself. + + + If no items were available before the timeout, returns + false, and sets "result" to null. + + + A timeout of -1 (i.e. System.Threading.Timeout.Infinite) + will be interpreted as a command to wait for an + indefinitely long period of time for an item to become + available. Usage of such a timeout is equivalent to + calling Dequeue() with no arguments. See also the MSDN + documentation for + System.Threading.Monitor.Wait(object,int). + + + If no items are present and the queue is in a closed + state, or if at any time while waiting the queue + transitions to a closed state (by a call to Close()), this + method will throw EndOfStreamException. + + + + + Retrieve the first item from the queue, or return + defaultValue immediately if no items are + available + + + If one or more objects are present in the queue at the + time of the call, the first item is removed from the queue + and returned. Otherwise, the defaultValue that was passed + in is returned immediately. This defaultValue may be null, + or in cases where null is part of the range of the queue, + may be some other sentinel object. The difference between + DequeueNoWait() and Dequeue() is that DequeueNoWait() will + not block when no items are available in the queue, + whereas Dequeue() will. + + + If at the time of call the queue is empty and in a + closed state (following a call to Close()), then this + method will throw EndOfStreamException. + + + + + Place an item at the end of the queue. + + If there is a thread waiting for an item to arrive, the + waiting thread will be woken, and the newly Enqueued item + will be passed to it. If the queue is closed on entry to + this method, EndOfStreamException will be thrown. + + + + Implementation of the IEnumerable interface, for + permitting SharedQueue to be used in foreach + loops. + + + Implementation of the IEnumerable interface, for + permitting SharedQueue to be used in foreach + loops. + + + Call only when the lock on m_queue is held. + + + + Implementation of the IEnumerator interface, for + permitting SharedQueue to be used in foreach loops. + + + Construct an enumerator for the given + SharedQueue. + + + Reset()ting a SharedQueue doesn't make sense, so + this method always throws + InvalidOperationException. + + + Miscellaneous helpful XML utilities. + + + Private constructor - this class has no instances + + + Constructs an indenting XmlTextWriter that writes to a + fresh MemoryStream. + + + Constructs an indenting XmlTextWriter that writes to + the supplied stream. + + + Constructs an indenting XmlTextWriter that writes to + the supplied file name. + + + Serializes an arbitrary serializable object to an + XML document. + + + diff --git a/packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.dll b/packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..9ba751bfbd44d9da73dc5d5ba9a9f26b754987ef GIT binary patch literal 264192 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 literal 0 HcmV?d00001 diff --git a/packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.xml b/packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.xml new file mode 100644 index 00000000..8a116fa0 --- /dev/null +++ b/packages/RabbitMQ.Client.3.6.9/lib/netcore45/RabbitMQ.Client.xml @@ -0,0 +1,6597 @@ + + + + RabbitMQ.Client + + + + Protocol major version (= 0) + + + Protocol minor version (= 9) + + + Protocol revision (= 1) + + + Protocol API name (= AMQP_0_9_1) + + + Default TCP port (= 5672) + + + (= 1) + + + (= 2) + + + (= 3) + + + (= 8) + + + (= 4096) + + + (= 206) + + + (= 200) + + + (= 311) + + + (= 313) + + + (= 320) + + + (= 402) + + + (= 403) + + + (= 404) + + + (= 405) + + + (= 406) + + + (= 501) + + + (= 502) + + + (= 503) + + + (= 504) + + + (= 505) + + + (= 506) + + + (= 530) + + + (= 540) + + + (= 541) + + + Autogenerated type. AMQP specification method "connection.start". + + + Autogenerated type. AMQP specification method "connection.start-ok". + + + Autogenerated type. AMQP specification method "connection.secure". + + + Autogenerated type. AMQP specification method "connection.secure-ok". + + + Autogenerated type. AMQP specification method "connection.tune". + + + Autogenerated type. AMQP specification method "connection.tune-ok". + + + Autogenerated type. AMQP specification method "connection.open". + + + Autogenerated type. AMQP specification method "connection.open-ok". + + + Autogenerated type. AMQP specification method "connection.close". + + + Autogenerated type. AMQP specification method "connection.close-ok". + + + Autogenerated type. AMQP specification method "connection.blocked". + + + Autogenerated type. AMQP specification method "connection.unblocked". + + + Autogenerated type. AMQP specification method "channel.open". + + + Autogenerated type. AMQP specification method "channel.open-ok". + + + Autogenerated type. AMQP specification method "channel.flow". + + + Autogenerated type. AMQP specification method "channel.flow-ok". + + + Autogenerated type. AMQP specification method "channel.close". + + + Autogenerated type. AMQP specification method "channel.close-ok". + + + Autogenerated type. AMQP specification method "exchange.declare". + + + Autogenerated type. AMQP specification method "exchange.declare-ok". + + + Autogenerated type. AMQP specification method "exchange.delete". + + + Autogenerated type. AMQP specification method "exchange.delete-ok". + + + Autogenerated type. AMQP specification method "exchange.bind". + + + Autogenerated type. AMQP specification method "exchange.bind-ok". + + + Autogenerated type. AMQP specification method "exchange.unbind". + + + Autogenerated type. AMQP specification method "exchange.unbind-ok". + + + Autogenerated type. AMQP specification method "queue.declare". + + + Autogenerated type. AMQP specification method "queue.declare-ok". + + + Autogenerated type. AMQP specification method "queue.bind". + + + Autogenerated type. AMQP specification method "queue.bind-ok". + + + Autogenerated type. AMQP specification method "queue.unbind". + + + Autogenerated type. AMQP specification method "queue.unbind-ok". + + + Autogenerated type. AMQP specification method "queue.purge". + + + Autogenerated type. AMQP specification method "queue.purge-ok". + + + Autogenerated type. AMQP specification method "queue.delete". + + + Autogenerated type. AMQP specification method "queue.delete-ok". + + + Autogenerated type. AMQP specification method "basic.qos". + + + Autogenerated type. AMQP specification method "basic.qos-ok". + + + Autogenerated type. AMQP specification method "basic.consume". + + + Autogenerated type. AMQP specification method "basic.consume-ok". + + + Autogenerated type. AMQP specification method "basic.cancel". + + + Autogenerated type. AMQP specification method "basic.cancel-ok". + + + Autogenerated type. AMQP specification method "basic.publish". + + + Autogenerated type. AMQP specification method "basic.return". + + + Autogenerated type. AMQP specification method "basic.deliver". + + + Autogenerated type. AMQP specification method "basic.get". + + + Autogenerated type. AMQP specification method "basic.get-ok". + + + Autogenerated type. AMQP specification method "basic.get-empty". + + + Autogenerated type. AMQP specification method "basic.ack". + + + Autogenerated type. AMQP specification method "basic.reject". + + + Autogenerated type. AMQP specification method "basic.recover-async". + + + Autogenerated type. AMQP specification method "basic.recover". + + + Autogenerated type. AMQP specification method "basic.recover-ok". + + + Autogenerated type. AMQP specification method "basic.nack". + + + Autogenerated type. AMQP specification method "tx.select". + + + Autogenerated type. AMQP specification method "tx.select-ok". + + + Autogenerated type. AMQP specification method "tx.commit". + + + Autogenerated type. AMQP specification method "tx.commit-ok". + + + Autogenerated type. AMQP specification method "tx.rollback". + + + Autogenerated type. AMQP specification method "tx.rollback-ok". + + + Autogenerated type. AMQP specification method "confirm.select". + + + Autogenerated type. AMQP specification method "confirm.select-ok". + + + Autogenerated type. AMQP specification content header properties for content class "basic" + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + Autogenerated type. Private implementation class - do not use directly. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close with timeout. + + + API-side invocation of connection.close with timeout. + + + Heartbeat frame for transmission. Reusable across connections. + + + Another overload of a Protocol property, useful + for exposing a tighter type. + + + Explicit implementation of IConnection.Protocol. + + + Try to close connection in a graceful way + + + Shutdown reason contains code and text assigned when closing the connection, + as well as the information about what initiated the close + + + Abort flag, if true, signals to close the ongoing connection immediately + and do not report any errors if it was already closed. + + + Timeout determines how much time internal close operations should be given + to complete. Negative or Timeout.Infinite value mean infinity. + + + + + + Loop only used while quiescing. Use only to cleanly close connection + + + + + We need to close the socket, otherwise suspending the application will take the maximum time allowed + + + + Broadcasts notification of the final shutdown of the connection. + + + + Sets the channel named in the SoftProtocolException into + "quiescing mode", where we issue a channel.close and + ignore everything except for subsequent channel.close + messages and the channel.close-ok reply that should + eventually arrive. + + + + Since a well-behaved peer will not wait indefinitely before + issuing the close-ok, we don't bother with a timeout here; + compare this to the case of a connection.close-ok, where a + timeout is necessary. + + + We need to send the close method and politely wait for a + reply before marking the channel as available for reuse. + + + As soon as SoftProtocolException is detected, we should stop + servicing ordinary application work, and should concentrate + on bringing down the channel as quickly and gracefully as + possible. The way this is done, as per the close-protocol, + is to signal closure up the stack *before* sending the + channel.close, by invoking ISession.Close. Once the upper + layers have been signalled, we are free to do what we need + to do to clean up and shut down the channel. + + + + + + May be called more than once. Should therefore be idempotent. + + + + API-side invocation of connection abort. + + + API-side invocation of connection abort. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection abort with timeout. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close. + + + API-side invocation of connection.close with timeout. + + + API-side invocation of connection.close with timeout. + + + + Represents a TCP-addressable AMQP peer: a host name and port number. + + + Some of the constructors take, as a convenience, a System.Uri + instance representing an AMQP server address. The use of Uri + here is not standardised - Uri is simply a convenient + container for internet-address-like components. In particular, + the Uri "Scheme" property is ignored: only the "Host" and + "Port" properties are extracted. + + + + + Default Amqp ssl port. + + + + + Indicates that the default port for the protocol should be used. + + + + + Creates a new instance of the . + + Hostname. + Port number. If the port number is -1, the default port number will be used. + Ssl option. + + + + Creates a new instance of the . + + Hostname. + Port number. If the port number is -1, the default port number will be used. + + + + Construct an AmqpTcpEndpoint with "localhost" as the hostname, and using the default port. + + + + + Creates a new instance of the with the given Uri and ssl options. + + + Please see the class overview documentation for information about the Uri format in use. + + + + + Creates a new instance of the with the given Uri. + + + Please see the class overview documentation for information about the Uri format in use. + + + + + Clones the endpoint. + + A copy with the same hostname, port, and TLS settings + + + + Clones the endpoint using the provided hostname. + + Hostname to use + A copy with the provided hostname and port/TLS settings of this endpoint + + + + Retrieve or set the hostname of this . + + + + Retrieve or set the port number of this + AmqpTcpEndpoint. A port number of -1 causes the default + port number. + + + + Retrieve IProtocol of this . + + + + + Retrieve the SSL options for this AmqpTcpEndpoint. If not set, null is returned. + + + + + Construct an instance from a protocol and an address in "hostname:port" format. + + + If the address string passed in contains ":", it is split + into a hostname and a port-number part. Otherwise, the + entire string is used as the hostname, and the port-number + is set to -1 (meaning the default number for the protocol + variant specified). + Hostnames provided as IPv6 must appear in square brackets ([]). + + + + + Splits the passed-in string on ",", and passes the substrings to . + + + Accepts a string of the form "hostname:port, + hostname:port, ...", where the ":port" pieces are + optional, and returns a corresponding array of s. + + + + + Compares this instance by value (protocol, hostname, port) against another instance. + + + + + Implementation of hash code depending on protocol, hostname and port, + to line up with the implementation of . + + + + + Returns a URI-like string of the form amqp-PROTOCOL://HOSTNAME:PORTNUMBER. + + + This method is intended mainly for debugging and logging use. + + + + + Structure holding an AMQP timestamp, a posix 64-bit time_t. + + + When converting between an AmqpTimestamp and a System.DateTime, + be aware of the effect of your local timezone. In particular, + different versions of the .NET framework assume different + defaults. + + + We have chosen a signed 64-bit time_t here, since the AMQP + specification through versions 0-9 is silent on whether + timestamps are signed or unsigned. + + + + + + Construct an . + + Unix time. + + + + Unix time. + + + + + Provides a debugger-friendly display. + + + + Represents a version of the AMQP specification. + + + Vendor-specific variants of particular official specification + versions exist: this class simply represents the AMQP + specification version, and does not try to represent + information about any custom variations involved. + + + AMQP version 0-8 peers sometimes advertise themselves as + version 8-0: for this reason, this class's constructor + special-cases 8-0, rewriting it at construction time to be 0-8 instead. + + + + + + Construct an from major and minor version numbers. + + + Converts major=8 and minor=0 into major=0 and minor=8. Please see the class comment. + + + + + The AMQP specification major version number. + + + + + The AMQP specification minor version number. + + + + + Implement value-equality comparison. + + + + + Implement hashing as for value-equality. + + + + + Format appropriately for display. + + + The specification currently uses "MAJOR-MINOR" as a display format. + + + + + A pluggable authentication mechanism. + + + + + Handle one round of challenge-response. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Return a new authentication mechanism implementation. + + + + Represents Basic.GetOk responses from the server. + + Basic.Get either returns an instance of this class, or null if a Basic.GetEmpty was received. + + + + + Sets the new instance's properties from the arguments passed in. + + Delivery tag for the message. + Redelivered flag for the message + The exchange this message was published to. + Routing key with which the message was published. + The number of messages pending on the queue, excluding the message being delivered. + The Basic-class content header properties for the message. + + + + + Retrieves the Basic-class content header properties for this message. + + + + + Retrieves the body of this message. + + + + + Retrieve the delivery tag for this message. See also . + + + + + Retrieve the exchange this message was published to. + + + + + Retrieve the number of messages pending on the queue, excluding the message being delivered. + + + Note that this figure is indicative, not reliable, and can + change arbitrarily as messages are added to the queue and removed by other clients. + + + + + Retrieve the redelivered flag for this message. + + + + + Retrieve the routing key with which this message was published. + + + + Wrapper for a byte[]. May appear as values read from + and written to AMQP field tables. + + + The sole reason for the existence of this class is to permit + encoding of byte[] as 'x' in AMQP field tables, an extension + to the specification that is part of the tentative JMS mapping + implemented by QPid. + + + Instances of this object may be found as values held in + IDictionary instances returned from + RabbitMQ.Client.Impl.WireFormatting.ReadTable, e.g. as part of + IBasicProperties.Headers tables. Likewise, instances may be + set as values in an IDictionary table to be encoded by + RabbitMQ.Client.Impl.WireFormatting.WriteTable. + + + When an instance of this class is encoded/decoded, the type + tag 'x' is used in the on-the-wire representation. The AMQP + standard type tag 'S' is decoded to a raw byte[], and a raw + byte[] is encoded as 'S'. Instances of System.String are + converted to a UTF-8 binary representation, and then encoded + using tag 'S'. In order to force the use of tag 'x', instances + of this class must be used. + + + + + + Creates a new instance of the with null for its Bytes property. + + + + + Creates a new instance of the . + + The wrapped byte array, as decoded or as to be encoded. + + + + The wrapped byte array, as decoded or as to be encoded. + + + + Main entry point to the RabbitMQ .NET AMQP client + API. Constructs instances. + + + A simple example of connecting to a broker: + + + IConnectionFactory factory = new ConnectionFactory(); + // + // The next six lines are optional: + factory.UserName = ConnectionFactory.DefaultUser; + factory.Password = ConnectionFactory.DefaultPass; + factory.VirtualHost = ConnectionFactory.DefaultVHost; + factory.HostName = hostName; + factory.Port = AmqpTcpEndpoint.UseDefaultPort; + // + IConnection conn = factory.CreateConnection(); + // + IModel ch = conn.CreateModel(); + // + // ... use ch's IModel methods ... + // + ch.Close(Constants.ReplySuccess, "Closing the channel"); + conn.Close(Constants.ReplySuccess, "Closing the connection"); + + + The same example, written more compactly with AMQP URIs: + + + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = "amqp://localhost"; + IConnection conn = factory.CreateConnection(); + ... + + + Please see also the API overview and tutorial in the User Guide. + + + Note that the Uri property takes a string representation of an + AMQP URI. Omitted URI parts will take default values. The + host part of the URI cannot be omitted and URIs of the form + "amqp://foo/" (note the trailling slash) also represent the + default virtual host. The latter issue means that virtual + hosts with an empty name are not addressable. + + + + Default value for the desired maximum channel number, with zero meaning unlimited (value: 0). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default value for connection attempt timeout, in milliseconds. + + + + + Default value for the desired maximum frame size, with zero meaning unlimited (value: 0). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default value for desired heartbeat interval, in seconds, with zero meaning none (value: 60). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default password (value: "guest"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default user name (value: "guest"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default virtual host (value: "/"). + + PLEASE KEEP THIS MATCHING THE DOC ABOVE. + + + + Default SASL auth mechanisms to use. + + + + + SASL auth mechanisms to use. + + + + + Set to true to enable automatic connection recovery. + + + + + Used to select next hostname to try when performing + connection recovery (re-connecting). Is not used for + non-recovering connections. + + + + The host to connect to. + + + + Amount of time client will wait for before re-trying to recover connection. + + + + + Amount of time protocol handshake operations are allowed to take before + timing out. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + The port to connect on. + indicates the default for the protocol should be used. + + + + + Protocol used, only AMQP 0-9-1 is supported in modern versions. + + + + + Timeout setting for connection attempts (in milliseconds). + + + + + Timeout setting for socket read operations (in milliseconds). + + + + + Timeout setting for socket write operations (in milliseconds). + + + + + Ssl options setting. + + + + + Set to true to make automatic connection recovery also recover topology (exchanges, queues, bindings, etc). + + + + + Task scheduler connections created by this factory will use when + dispatching consumer operations, such as message deliveries. + + + + + Construct a fresh instance, with all fields set to their respective defaults. + + + + + Connection endpoint. + + + + + Set connection parameters using the amqp or amqps scheme. + + + + + Set connection parameters using the amqp or amqps scheme. + + + + + Dictionary of client properties to be sent to the server. + + + + + Password to use when authenticating to the server. + + + + + Maximum channel number to ask for. + + + + + Frame-max parameter to ask for (in bytes). + + + + + Heartbeat timeout to use when negotiating with the server (in seconds). + + + + + When set to true, background thread will be used for the I/O loop. + + + + + Username to use when authenticating to the server. + + + + + Virtual host to access during this connection. + + + + + Given a list of mechanism names supported by the server, select a preferred mechanism, + or null if we have none in common. + + + + + Create a connection to the specified endpoint. + + + When the configured hostname was not reachable. + + + + + Create a connection to the specified endpoint. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + When the configured hostname was not reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of hostnames to use for the initial + connection and recovery. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of hostnames to use for the initial + connection and recovery. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of endpoints to use for the initial + connection and recovery. + + Open connection + + When no hostname was reachable. + + + + + Create a connection using a list of hostnames. The first reachable + hostname will be used initially. Subsequent hostname picks are determined + by the configured. + + + List of endpoints to use for the initial + connection and recovery. + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + Open connection + + When no hostname was reachable. + + + + + Unescape a string, protecting '+'. + + + + + Set custom socket options by providing a SocketFactory. + + + + + Creates a new instance of the . + + Specifies the addressing scheme. + New instance of a . + + + + Useful default/base implementation of . + Subclass and override in application code. + + + Note that the "Handle*" methods run in the connection's thread! + Consider using , which exposes + events that can be subscribed to consumer messages. + + + + + Creates a new instance of an . + + + + + Constructor which sets the Model property to the given value. + + Common AMQP model. + + + + Retrieve the consumer tag this consumer is registered as; to be used when discussing this consumer + with the server, for instance with . + + + + + Returns true while the consumer is registered and expecting deliveries from the broker. + + + + + If our shuts down, this property will contain a description of the reason for the + shutdown. Otherwise it will contain null. See . + + + + + Signalled when the consumer gets cancelled. + + + + + Retrieve the this consumer is associated with, + for use in acknowledging received messages, for instance. + + + + + Called when the consumer is cancelled for reasons other than by a basicCancel: + e.g. the queue has been deleted (either by this channel or by any other channel). + See for notification of consumer cancellation due to basicCancel + + Consumer tag this consumer is registered. + + + + Called upon successful deregistration of the consumer from the broker. + + Consumer tag this consumer is registered. + + + + Called upon successful registration of the consumer with the broker. + + Consumer tag this consumer is registered. + + + + Called each time a message arrives for this consumer. + + + Does nothing with the passed in information. + Note that in particular, some delivered messages may require acknowledgement via . + The implementation of this method in this class does NOT acknowledge such messages. + + + + + Called when the model shuts down. + + Common AMQP model. + Information about the reason why a particular model, session, or connection was destroyed. + + + + Default implementation - overridable in subclasses. + + This default implementation simply sets the + property to false, and takes no further action. + + + + + Convenience class providing compile-time names for standard exchange types. + + + Use the static members of this class as values for the + "exchangeType" arguments for IModel methods such as + ExchangeDeclare. The broker may be extended with additional + exchange types that do not appear in this class. + + + + + Exchange type used for AMQP direct exchanges. + + + + + Exchange type used for AMQP fanout exchanges. + + + + + Exchange type used for AMQP headers exchanges. + + + + + Exchange type used for AMQP topic exchanges. + + + + + Retrieve a collection containing all standard exchange types. + + + + + Handle one round of challenge-response. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Return a new authentication mechanism implementation. + + + + + Convenience class providing compile-time names for standard headers. + + + Use the static members of this class as headers for the + arguments for Queue and Exchange declaration or Consumer creation. + The broker may be extended with additional + headers that do not appear in this class. + + + + + x-max-priority header + + + + + x-max-length header + + + + + x-max-length-bytes header + + + + + x-dead-letter-exchange header + + + + + x-dead-letter-routing-key header + + + + + x-message-ttl header + + + + + x-expires header + + + + + alternate-exchange header + + + + + x-priority header + + + + Consumer interface. Used to + receive messages from a queue by subscription. + + + See IModel.BasicConsume, IModel.BasicCancel. + + + Note that the "Handle*" methods run in the connection's + thread! Consider using QueueingBasicConsumer, which uses a + SharedQueue instance to safely pass received messages across + to user threads. + + + + + + Retrieve the this consumer is associated with, + for use in acknowledging received messages, for instance. + + + + + Signalled when the consumer gets cancelled. + + + + + Called when the consumer is cancelled for reasons other than by a basicCancel: + e.g. the queue has been deleted (either by this channel or by any other channel). + See for notification of consumer cancellation due to basicCancel + + Consumer tag this consumer is registered. + + + + Called upon successful deregistration of the consumer from the broker. + + Consumer tag this consumer is registered. + + + + Called upon successful registration of the consumer with the broker. + + Consumer tag this consumer is registered. + + + + Called each time a message arrives for this consumer. + + + Does nothing with the passed in information. + Note that in particular, some delivered messages may require acknowledgement via . + The implementation of this method in this class does NOT acknowledge such messages. + + + + + Called when the model shuts down. + + Common AMQP model. + Information about the reason why a particular model, session, or connection was destroyed. + + + Common AMQP Basic content-class headers interface, + spanning the union of the functionality offered by versions + 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + The specification code generator provides + protocol-version-specific implementations of this interface. To + obtain an implementation of this interface in a + protocol-version-neutral way, use . + + + Each property is readable, writable and clearable: a cleared + property will not be transmitted over the wire. Properties on a + fresh instance are clear by default. + + + + + + Application Id. + + + + + Intra-cluster routing identifier (cluster id is deprecated in AMQP 0-9-1). + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Application correlation identifier. + + + + + Non-persistent (1) or persistent (2). + + + + + Message expiration specification. + + + + + Message header field table. Is of type . + + + + + Application message Id. + + + + + Sets to either persistent (2) or non-persistent (1). + + + + + Message priority, 0 to 9. + + + + + Destination to reply to. + + + + + Convenience property; parses property using , + and serializes it using . + Returns null if property cannot be parsed by . + + + + + Message timestamp. + + + + + Message type name. + + + + + User Id. + + + + + Clear the property. + + + + + Clear the property (cluster id is deprecated in AMQP 0-9-1). + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the Type property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present (cluster id is deprecated in AMQP 0-9-1). + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the Type property is present. + + + + + Returns true if the UserId property is present. + + + + Sets to either persistent (2) or non-persistent (1). + + + The numbers 1 and 2 for delivery mode are "magic" in that + they appear in the AMQP 0-8 and 0-9 specifications as part + of the definition of the DeliveryMode Basic-class property, + without being defined as named constants. + + + Calling this method causes to take on a value. + In order to reset to the default empty condition, call . + + + + + + Main interface to an AMQP connection. + + + + Instances of are used to create fresh + sessions/channels. The class is used to + construct instances. + Please see the documentation for ConnectionFactory for an example of usage. + Alternatively, an API tutorial can be found in the User Guide. + + + Extends the interface, so that the "using" + statement can be used to scope the lifetime of a channel when + appropriate. + + + + + + If true, will close the whole connection as soon as there are no channels open on it; + if false, manual connection closure will be required. + + + DON'T set AutoClose to true before opening the first + channel, because the connection will be immediately closed if you do! + + + + + The maximum channel number this connection supports (0 if unlimited). + Usable channel numbers range from 1 to this number, inclusive. + + + + + A copy of the client properties that has been sent to the server. + + + + + Returns null if the connection is still in a state + where it can be used, or the cause of its closure otherwise. + + + + Applications should use the ConnectionShutdown event to + avoid race conditions. The scenario to avoid is checking + , seeing it is null (meaning the + was available for use at the time of the check), and + interpreting this mistakenly as a guarantee that the + will remain usable for a time. Instead, the + operation of interest should simply be attempted: if the + is not in a usable state, an exception will be + thrown (most likely , but may + vary depending on the particular operation being attempted). + + + + + + Retrieve the endpoint this connection is connected to. + + + + + The maximum frame size this connection supports (0 if unlimited). + + + + + The current heartbeat setting for this connection (0 for disabled), in seconds. + + + + + Returns true if the connection is still in a state where it can be used. + Identical to checking if equal null. + + + + + Returns the known hosts that came back from the + broker in the connection.open-ok method at connection + startup time. Null until the connection is completely open and ready for use. + + + + + The this connection is using to communicate with its peer. + + + + + A dictionary of the server properties sent by the server while establishing the connection. + This typically includes the product name and version of the server. + + + + + Returns the list of objects that contain information + about any errors reported while closing the connection in the order they appeared + + + + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + Signalled when an exception occurs in a callback invoked by the connection. + + + This event is signalled when a ConnectionShutdown handler + throws an exception. If, in future, more events appear on + , then this event will be signalled whenever one + of those event handlers throws an exception, as well. + + + + + Raised when the connection is destroyed. + + + If the connection is already destroyed at the time an + event handler is added to this event, the event handler + will be fired immediately. + + + + + Abort this connection and all its channels. + + + Note that all active channels, sessions, and models will be closed if this method is called. + In comparison to normal method, will not throw + or during closing connection. + This method waits infinitely for the in-progress close operation to complete. + + + + + Abort this connection and all its channels. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the connection + + + + + + Abort this connection and all its channels and wait with a + timeout for all the in-progress close operations to complete. + + + This method, behaves in a similar way as method with the + only difference that it explictly specifies the timeout given + for all the in-progress close operations to complete. + If timeout is reached and the close operations haven't finished, then socket is forced to close. + + To wait infinitely for the close operations to complete use . + + + + + + Abort this connection and all its channels and wait with a + timeout for all the in-progress close operations to complete. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Close this connection and all its channels. + + + Note that all active channels, sessions, and models will be + closed if this method is called. It will wait for the in-progress + close operation to complete. This method will not return to the caller + until the shutdown is complete. If the connection is already closed + (or closing), then this method will throw . + It can also throw when socket was closed unexpectedly. + + + + + Close this connection and all its channels. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Close this connection and all its channels + and wait with a timeout for all the in-progress close operations to complete. + + + Note that all active channels, sessions, and models will be + closed if this method is called. It will wait for the in-progress + close operation to complete with a timeout. If the connection is + already closed (or closing), then this method will throw . + It can also throw when socket was closed unexpectedly. + If timeout is reached and the close operations haven't finished, then socket is forced to close. + + To wait infinitely for the close operations to complete use . + + + + + + Close this connection and all its channels + and wait with a timeout for all the in-progress close operations to complete. + + + The method behaves in the same way as , with the only + difference that the connection is closed with the given connection close code and message. + + The close code (See under "Reply Codes" in the AMQP specification). + + + A message indicating the reason for closing the connection. + + + + + + Create and return a fresh channel, session, and model. + + + + + Handle incoming Connection.Blocked methods. + + + + + Handle incoming Connection.Unblocked methods. + + + + + Dictionary of client properties to be sent to the server. + + + + + Password to use when authenticating to the server. + + + + + Maximum channel number to ask for. + + + + + Frame-max parameter to ask for (in bytes). + + + + + Heartbeat setting to request (in seconds). + + + + + When set to true, background threads will be used for I/O and heartbeats. + + + + + Username to use when authenticating to the server. + + + + + Virtual host to access during this connection. + + + + + Given a list of mechanism names supported by the server, select a preferred mechanism, + or null if we have none in common. + + + + + Create a connection to the specified endpoint. + + + + + Create a connection to the specified endpoint. + + /// Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + + Connects to the first reachable hostname from the list. + + List of host names to use + + + + + Connects to the first reachable hostname from the list. + + List of host names to use + + Application-specific connection name, will be displayed in the management UI + if RabbitMQ server supports it. This value doesn't have to be unique and cannot + be used as a connection identifier, e.g. in HTTP API requests. + This value is supposed to be human-readable. + + + + + + Advanced option. + + What task scheduler should consumer dispatcher use. + + + + + Amount of time protocol handshake operations are allowed to take before + timing out. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + A decoded AMQP content header frame. + + + + + Retrieve the AMQP class ID of this content header. + + + + + Retrieve the AMQP class name of this content header. + + + + + Picks a hostname from a list of options that should be used + by . + + + + + + + A decoded AMQP method frame. + + + + AMQP methods can be RPC requests, RPC responses, exceptions + (ChannelClose, ConnectionClose), or one-way asynchronous + messages. Currently this information is not recorded in their + type or interface: it is implicit in the way the method is + used, and the way it is defined in the AMQP specification. A + future revision of the RabbitMQ .NET client library may extend + the IMethod interface to represent this information + explicitly. + + + + + + Retrieves the class ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the method ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the name of this method - for debugging use. + + + + + Common AMQP model, spanning the union of the + functionality offered by versions 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + Extends the interface, so that the "using" + statement can be used to scope the lifetime of a channel when appropriate. + + + + + Channel number, unique per connections. + + + + + Returns null if the session is still in a state where it can be used, + or the cause of its closure otherwise. + + + + Signalled when an unexpected message is delivered + + Under certain circumstances it is possible for a channel to receive a + message delivery which does not match any consumer which is currently + set up via basicConsume(). This will occur after the following sequence + of events: + + ctag = basicConsume(queue, consumer); // i.e. with explicit acks + // some deliveries take place but are not acked + basicCancel(ctag); + basicRecover(false); + + Since requeue is specified to be false in the basicRecover, the spec + states that the message must be redelivered to "the original recipient" + - i.e. the same channel / consumer-tag. But the consumer is no longer + active. + + In these circumstances, you can register a default consumer to handle + such deliveries. If no default consumer is registered an + InvalidOperationException will be thrown when such a delivery arrives. + + Most people will not need to use this. + + + + Returns true if the model is no longer in a state where it can be used. + + + + + Returns true if the model is still in a state where it can be used. + Identical to checking if equals null. + + + + When in confirm mode, return the sequence number of the next message to be published. + + + + + Signalled when a Basic.Ack command arrives from the broker. + + + + + Signalled when a Basic.Nack command arrives from the broker. + + + + + All messages received before this fires that haven't been ack'ed will be redelivered. + All messages received afterwards won't be. + + + Handlers for this event are invoked by the connection thread. + It is sometimes useful to allow that thread to know that a recover-ok + has been received, rather than the thread that invoked . + + + + + Signalled when a Basic.Return command arrives from the broker. + + + + + Signalled when an exception occurs in a callback invoked by the model. + + Examples of cases where this event will be signalled + include exceptions thrown in methods, or + exceptions thrown in delegates etc. + + + + + Notifies the destruction of the model. + + + If the model is already destroyed at the time an event + handler is added to this event, the event handler will be fired immediately. + + + + + Abort this session. + + + If the session is already closed (or closing), then this + method does nothing but wait for the in-progress close + operation to complete. This method will not return to the + caller until the shutdown is complete. + In comparison to normal method, will not throw + or or any other during closing model. + + + + + Abort this session. + + + The method behaves in the same way as , with the only + difference that the model is closed with the given model close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the model + + + + + + (Spec method) Acknowledge one or more delivered message(s). + + + + + Delete a Basic content-class consumer. + + + + Start a Basic content-class consumer. + + The consumer is started with noAck=false (i.e. BasicAck is required), + an empty consumer tag (i.e. the server creates and returns a fresh consumer tag), + noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + The consumer is started with + an empty consumer tag (i.e. the server creates and returns a fresh consumer tag), + noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + The consumer is started with noLocal=false and exclusive=false. + + + + Start a Basic content-class consumer. + + + + (Spec method) Retrieve an individual message, if + one is available; returns null if the server answers that + no messages are currently available. See also . + + + + Reject one or more delivered message(s). + + + + (Spec method) Convenience overload of BasicPublish. + + + The publication occurs with mandatory=false and immediate=false. + + + + + (Spec method) Convenience overload of BasicPublish. + + + The publication occurs with mandatory=false + + + + + (Spec method) Convenience overload of BasicPublish. + + + + + (Spec method) Configures QoS parameters of the Basic content-class. + + + + + (Spec method). + + + + + (Spec method). + + + + (Spec method) Reject a delivered message. + + + Close this session. + + If the session is already closed (or closing), then this + method does nothing but wait for the in-progress close + operation to complete. This method will not return to the + caller until the shutdown is complete. + + + + Close this session. + + The method behaves in the same way as Close(), with the only + difference that the model is closed with the given model + close code and message. + + The close code (See under "Reply Codes" in the AMQP specification) + + + A message indicating the reason for closing the model + + + + + + Enable publisher acknowledgements. + + + + + Construct a completely empty content header for use with the Basic content class. + + + + + (Extension method) Bind an exchange to an exchange. + + + + + (Extension method) Bind an exchange to an exchange. + + + + + Like ExchangeBind but sets nowait to true. + + + + (Spec method) Declare an exchange. + + The exchange is declared non-passive and non-internal. + The "nowait" option is not exercised. + + + + + (Spec method) Declare an exchange. + + + The exchange is declared non-passive, non-autodelete, and + non-internal, with no arguments. The "nowait" option is not exercised. + + + + + (Spec method) Declare an exchange. + + + The exchange is declared non-passive, non-durable, non-autodelete, and + non-internal, with no arguments. The "nowait" option is not exercised. + + + + + Same as ExchangeDeclare but sets nowait to true and returns void (as there + will be no response from the server). + + + + + (Spec method) Declare an exchange. + + + The exchange is declared passive. + + + + + (Spec method) Delete an exchange. + + + + (Spec method) Delete an exchange. + + The exchange is deleted regardless of any queue bindings. + + + + + Like ExchangeDelete but sets nowait to true. + + + + + (Extension method) Unbind an exchange from an exchange. + + + + + (Extension method) Unbind an exchange from an exchange. + + + + + Like ExchangeUnbind but sets nowait to true. + + + + + (Spec method) Bind a queue to an exchange. + + + + (Spec method) Bind a queue to an exchange. + + + Same as QueueBind but sets nowait parameter to true. + + + (Spec method) Declare a queue. + + The queue is declared non-passive, non-durable, + but exclusive and autodelete, with no arguments. The + server autogenerates a name for the queue - the generated name is the return value of this method. + + + + (Spec method) Declare a queue. + + + + Same as QueueDeclare but sets nowait to true and returns void (as there + will be no response from the server). + + + + Declare a queue passively. + + The queue is declared passive, non-durable, + non-exclusive, and non-autodelete, with no arguments. + The queue is declared passively; i.e. only check if it exists. + + + + + Returns the number of messages in a queue ready to be delivered + to consumers. This method assumes the queue exists. If it doesn't, + an exception will be closed with an exception. + + The name of the queue + + + + Returns the number of consumers on a queue. + This method assumes the queue exists. If it doesn't, + an exception will be closed with an exception. + + The name of the queue + + + + (Spec method) Delete a queue. + + + Returns the number of messages purged during queue deletion. + uint.MaxValue. + + + + + (Spec method) Delete a queue. + + + Returns the number of messages purged during queue deletion. + + + + + Same as QueueDelete but sets nowait parameter to true + and returns void (as there will be no response from the server) + + + + + (Spec method) Purge a queue of messages. + + + Returns the number of messages purged. + + + + + (Spec method) Unbind a queue from an exchange. + + + + + (Spec method) Commit this session's active TX transaction. + + + + + (Spec method) Roll back this session's active TX transaction. + + + + + (Spec method) Enable TX mode for this session. + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + True if no nacks were received within the timeout, otherwise false. + How long to wait (at most) before returning + whether or not any nacks were returned. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + True if no nacks were received within the timeout, otherwise false. + How long to wait (at most) before returning + whether or not any nacks were returned. + + True if the method returned because + the timeout elapsed, not because all messages were ack'd or at least one nack'd. + + + Waits until all messages published since the last call have + been either ack'd or nack'd by the broker. Returns whether + all the messages were ack'd (and none were nack'd). Note, + throws an exception when called on a non-Confirm channel. + + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been ack'd by the broker. If a nack is received, throws an + OperationInterrupedException exception immediately. + + + + + Wait until all published messages have been confirmed. + + + Waits until all messages published since the last call have + been ack'd by the broker. If a nack is received or the timeout + elapses, throws an OperationInterrupedException exception immediately. + + + + + Amount of time protocol operations (e.g. queue.declare) are allowed to take before + timing out. + + + + + Object describing various overarching parameters + associated with a particular AMQP protocol variant. + + + + + Retrieve the protocol's API name, used for printing, + configuration properties, IDE integration, Protocols.cs etc. + + + + + Retrieve the protocol's default TCP port. + + + + + Retrieve the protocol's major version number. + + + + + Retrieve the protocol's minor version number. + + + + + Retrieve the protocol's revision (if specified). + + + + + Construct a connection from a given set of parameters, + a frame handler, and no automatic recovery. + The "insist" parameter is passed on to the AMQP connection.open method. + + + + + Construct a connection from a given set of parameters, + a frame handler, and automatic recovery settings. + + + + + Construct a connection from a given set of parameters, + a frame handler, a client-provided name, and no automatic recovery. + The "insist" parameter is passed on to the AMQP connection.open method. + + + + + Construct a connection from a given set of parameters, + a frame handler, a client-provided name, and automatic recovery settings. + + + + + Construct a frame handler for a given endpoint. + + Socket factory method. + Timeout in milliseconds. + Represents a TCP-addressable AMQP peer: a host name and port number. + + + + Construct a protocol model atop a given session. + + + + + + A marker interface for entities that are recoverable (currently connection or channel). + + + + + Common AMQP Stream content-class headers interface, + spanning the union of the functionality offered by versions 0-8, 0-8qpid, 0-9 and 0-9-1 of AMQP. + + + + The specification code generator provides + protocol-version-specific implementations of this interface. To + obtain an implementation of this interface in a + protocol-version-neutral way, use IModel.CreateStreamProperties(). + + + Each property is readable, writable and clearable: a cleared + property will not be transmitted over the wire. Properties on a fresh instance are clear by default. + + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Message header field table. + + + + + Message priority, 0 to 9. + + + + + Message timestamp. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Common interface for network (TCP/IP) connection classes. + + + + + Local port. + + + + + Remote port. + + + + + The name of the authentication mechanism, as negotiated on the wire. + + + + + Return a new authentication mechanism implementation. + + + + + Provides access to the supported implementations. + + + + + Protocol version 0-9-1 as modified by Pivotal. + + + + + Retrieve the current default protocol variant (currently AMQP_0_9_1). + + + + + Container for an exchange name, exchange type and + routing key, usable as the target address of a message to be published. + + + + The syntax used for the external representation of instances + of this class is compatible with QPid's "Reply-To" field + pseudo-URI format. The pseudo-URI format is + (exchange-type)://(exchange-name)/(routing-key), where + exchange-type is one of the permitted exchange type names (see + class ExchangeType), exchange-name must be present but may be + empty, and routing-key must be present but may be empty. + + + The syntax is as it is solely for compatibility with QPid's + existing usage of the ReplyTo field; the AMQP specifications + 0-8 and 0-9 do not define the format of the field, and do not + define any format for the triple (exchange name, exchange + type, routing key) that could be used instead. Please see also + the way class RabbitMQ.Client.MessagePatterns.SimpleRpcServer + uses the ReplyTo field. + + + + + + Regular expression used to extract the exchange-type, + exchange-name and routing-key from a string. + + + + + Creates a new instance of the . + + Exchange type. + Exchange name. + Routing key. + + + + Retrieve the exchange name. + + + + + Retrieve the exchange type string. + + + + + Retrieve the routing key. + + + + + Parse a out of the given string, + using the regex. + + + + + Reconstruct the "uri" from its constituents. + + + + + Represents Queue info. + + + + + Creates a new instance of the . + + Queue name. + Message count. + Consumer count. + + + + Consumer count. + + + + + Message count. + + + + + Queue name. + + + + + A implementation that + uses a to buffer incoming deliveries. + + + + Received messages are placed in the SharedQueue as instances + of . + + + Note that messages taken from the SharedQueue may need + acknowledging with . + + + When the consumer is closed, through BasicCancel or through + the shutdown of the underlying or , + the method is called, which causes any + Enqueue() operations, and Dequeue() operations when the queue + is empty, to throw EndOfStreamException (see the comment for ). + + + The following is a simple example of the usage of this class: + + + IModel channel = ...; + QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); + channel.BasicConsume(queueName, null, consumer); + + // At this point, messages will be being asynchronously delivered, + // and will be queueing up in consumer.Queue. + + while (true) { + try { + BasicDeliverEventArgs e = (BasicDeliverEventArgs) consumer.Queue.Dequeue(); + // ... handle the delivery ... + channel.BasicAck(e.DeliveryTag, false); + } catch (EndOfStreamException ex) { + // The consumer was cancelled, the model closed, or the + // connection went away. + break; + } + } + + + + + + Creates a fresh , + initialising the property to null + and the property to a fresh . + + + + + Creates a fresh , with + set to the argument, and set to a fresh . + + + + + Creates a fresh , + initialising the + and properties to the given values. + + + + + Retrieves the that messages arrive on. + + + + + Overrides 's implementation, + building a instance and placing it in the Queue. + + + + + Overrides 's OnCancel implementation, + extending it to call the Close() method of the . + + + + + Information about the reason why a particular model, session, or connection was destroyed. + + + The and properties should be used to determine the originator of the shutdown event. + + + + + Construct a with the given parameters and + 0 for and . + + + + + Construct a with the given parameters. + + + + + Object causing the shutdown, or null if none. + + + + + AMQP content-class ID, or 0 if none. + + + + + Returns the source of the shutdown event: either the application, the library, or the remote peer. + + + + + AMQP method ID within a content-class, or 0 if none. + + + + + One of the standardised AMQP reason codes. See RabbitMQ.Client.Framing.*.Constants. + + + + + Informative human-readable reason text. + + + + + Override ToString to be useful for debugging. + + + + + Describes the source of a shutdown event. + + + + + The shutdown event originated from the application using the RabbitMQ .NET client library. + + + + + The shutdown event originated from the RabbitMQ .NET client library itself. + + + Shutdowns with this ShutdownInitiator code may appear if, + for example, an internal error is detected by the client, + or if the server sends a syntactically invalid + frame. Another potential use is on IConnection AutoClose. + + + + + The shutdown event originated from the remote AMQP peer. + + + A valid received connection.close or channel.close event + will manifest as a shutdown with this ShutdownInitiator. + + + + + Single entry object in the shutdown report that encapsulates description + of the error which occured during shutdown. + + + + + Description provided in the error. + + + + + object that occured during shutdown, or null if unspecified. + + + + + Represents a configurable SSL option, used in setting up an SSL connection. + + + + + Constructs an SslOption specifying both the server cannonical name and the client's certificate path. + + + + + Constructs an with no parameters set. + + + + + Retrieve or set the path to client certificate. + + + + + Retrieve or set the path to client certificate. + + + + + Flag specifying if Ssl should indeed be used. + + + + + Retrieve or set server's Canonical Name. + This MUST match the CN on the Certificate else the SSL connection will fail. + + + + + Framework for constructing various types of AMQP. Basic-class application messages. + + + + + By default, new instances of BasicMessageBuilder and its subclasses will have this much initial buffer space. + + + + + Construct an instance ready for writing. + + + The is used for the initial accumulator buffer size. + + + + + Construct an instance ready for writing. + + + + + Retrieve the associated with this instance. + + + + + Retrieve this instance's writing to BodyStream. + + + If no instance exists, one is created, + pointing at the beginning of the accumulator. If one + already exists, the existing instance is returned. The + instance is not reset. + + + + + Retrieve the being used to construct the message body. + + + + + Retrieves the dictionary that will be used to construct the message header table. + It is of type . + + + + + Finish and retrieve the content body for transmission. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Write a single byte into the message body, without encoding or interpretation. + + + + + Write a byte array into the message body, without encoding or interpretation. + + + + + Write a section of a byte array into the message body, without encoding or interpretation. + + + + + Framework for analyzing various types of AMQP Basic-class application messages. + + + + + Construct an instance ready for reading. + + + + + Retrieve the associated with this instance. + + + + + Retrieve this instance's NetworkBinaryReader reading from . + + + If no NetworkBinaryReader instance exists, one is created, + pointing at the beginning of the body. If one already + exists, the existing instance is returned. The instance is + not reset. + + + + + Retrieve the message body, as a byte array. + + + + + Retrieve the being used to read from the message body. + + + + + Retrieves the content header properties of the message being read. Is of type . + + + + + Read a single byte from the body stream, without encoding or interpretation. + Returns -1 for end-of-stream. + + + + + Read bytes from the body stream into a section of + an existing byte array, without encoding or + interpretation. Returns the number of bytes read from the + body and written into the target array, which may be less + than the number requested if the end-of-stream is reached. + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + MIME type associated with QPid BytesMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Write a section of a byte array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Write a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + MIME type associated with QPid BytesMessages. + + + + + Construct an instance for reading. See . + + + + + Reads a given number ("count") of bytes from the message body, + placing them into "target", starting at "offset". + + + + + Reads a from the message body. + + + + + Reads a given number of bytes from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Interface for constructing messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Write a section of a byte array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Write a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Analyzes messages binary-compatible with QPid's "BytesMessage" wire encoding. + + + + + Reads a given number ("count") of bytes from the message body, + placing them into "target", starting at "offset". + + + + + Reads a from the message body. + + + + + Reads a given number of bytes from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Interface for constructing messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + Retrieves the dictionary that will be written into the body of the message. + + + + + Analyzes messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + Parses the message body into an instance. + + + + + Interface for constructing application messages. + + + Subinterfaces provide specialized data-writing methods. This + base interface deals with the lowest common denominator: + bytes, with no special encodings for higher-level objects. + + + + + Retrieve the being used to construct the message body. + + + + + Retrieves the dictionary that will be used to construct the message header table. + It is of type . + + + + + Finish and retrieve the content body for transmission. + + + + + Finish and retrieve the content header for transmission. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Write a single byte into the message body, without encoding or interpretation. + + + + + Write a byte array into the message body, without encoding or interpretation. + + + + + Write a section of a byte array into the message body, without encoding or interpretation. + + + + + Interface for analyzing application messages. + + + Subinterfaces provide specialized data-reading methods. This + base interface deals with the lowest common denominator: + bytes, with no special encodings for higher-level objects. + + + + + Retrieve the message body, as a byte array. + + + + + Retrieve the being used to read from the message body. + + + + + Retrieves the content header properties of the message being read. Is of type . + + + + + Read a single byte from the body stream, without encoding or interpretation. + Returns -1 for end-of-stream. + + + + + Read bytes from the body stream into a section of + an existing byte array, without encoding or + interpretation. Returns the number of bytes read from the + body and written into the target array, which may be less + than the number requested if the end-of-stream is reached. + + + + + Interface for constructing messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a section of a byte array into the message body being assembled. + + + + + Writes a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + The only permitted types are bool, int, short, byte, char, + long, float, double, byte[] and string. + + + + + Writes objects using WriteObject(), one after the other. No length indicator is written. + See also . + + + + + Writes a value into the message body being assembled. + + + + + Writes a string value into the message body being assembled. + + + + + Analyzes messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a array from the message body. + The body contains information about the size of the array to read. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads array from the message body until the end-of-stream is reached. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + MIME type associated with QPid MapMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Retrieves the dictionary that will be written into the body of the message. + + + + + Finish and retrieve the content body for transmission. + + + Calling this message clears Body to null. Subsequent calls will fault. + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "MapMessage" wire encoding. + + + + + MIME type associated with QPid MapMessages. + + + + + Construct an instance for reading. See . + + + + + Parses the message body into an instance. + + . + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "MapMessage" wire encoding. + + + + + + Utility class for extracting typed values from strings. + + + + + Creates the protocol violation exception. + + Type of the target. + The source. + Instance of the . + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of an . + + + + + + Attempt to parse a string representation of a . + + + + + + Attempt to parse a string representation of a . + + + + + + Constructs AMQP Basic-class messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + MIME type associated with QPid StreamMessages. + + + + + Construct an instance for writing. See . + + + + + Construct an instance for writing. See . + + + + + Returns the default MIME content type for messages this instance constructs, + or null if none is available or relevant. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a section of a byte array into the message body being assembled. + + + + + Writes a array into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + + + Writes a value into the message body being assembled. + + + + + Writes an value into the message body being assembled. + + + The only permitted types are bool, int, short, byte, char, + long, float, double, byte[] and string. + + + + + Writes objects using WriteObject(), one after the other. No length indicator is written. + See also . + + + + + Writes a value into the message body being assembled. + + + + + Writes a string value into the message body being assembled. + + + + + Analyzes AMQP Basic-class messages binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + MIME type associated with QPid StreamMessages. + + + + + Construct an instance for reading. See . + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a array from the message body. + The body contains information about the size of the array to read. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads a from the message body. + + + + + Reads an from the message body. + + + + + Reads array from the message body until the end-of-stream is reached. + + + + + Reads a from the message body. + + + + + Reads a from the message body. + + + + + Tags used in parsing and generating StreamWireFormatting message bodies. + + + + + Internal support class for use in reading and + writing information binary-compatible with QPid's "StreamMessage" wire encoding. + + + + + + + + + + + + + + Contains all the information about a message acknowledged + from an AMQP broker within the Basic content-class. + + + The sequence number of the acknowledged message, or + the closed upper bound of acknowledged messages if multiple + is true. + + + Whether this acknoledgement applies to one message + or multiple messages. + + + Contains all the information about a message delivered + from an AMQP broker within the Basic content-class. + + + Default constructor. + + + Constructor that fills the event's properties from + its arguments. + + + The content header of the message. + + + The message body. + + + The consumer tag of the consumer that the message + was delivered to. + + + The delivery tag for this delivery. See + IModel.BasicAck. + + + The exchange the message was originally published + to. + + + The AMQP "redelivered" flag. + + + The routing key used when the message was + originally published. + + + Contains all the information about a message nack'd + from an AMQP broker within the Basic content-class. + + + The sequence number of the nack'd message, or the + closed upper bound of nack'd messages if multiple is + true. + + + Whether this nack applies to one message or + multiple messages. + + + Ignore + Clients should ignore this field. + + + Contains all the information about a message returned + from an AMQP broker within the Basic content-class. + + + The content header of the message. + + + The message body. + + + The exchange the returned message was originally + published to. + + + The AMQP reason code for the return. See + RabbitMQ.Client.Framing.*.Constants. + + + Human-readable text from the broker describing the + reason for the return. + + + The routing key used when the message was + originally published. + + + Wrap an exception thrown by a callback. + + + Access helpful information about the context in + which the wrapped exception was thrown. + + + Access the wrapped exception. + + + Describes an exception that was thrown during the + library's invocation of an application-supplied callback + handler. + + + When an exception is thrown from a callback registered with + part of the RabbitMQ .NET client library, it is caught, + packaged into a CallbackExceptionEventArgs, and passed through + the appropriate IModel's or IConnection's CallbackException + event handlers. If an exception is thrown in a + CallbackException handler, it is silently swallowed, as + CallbackException is the last chance to handle these kinds of + exception. + + + Code constructing CallbackExceptionEventArgs instances will + usually place helpful information about the context of the + call in the IDictionary available through the Detail property. + + + + + + Event relating to connection being blocked. + + + + + Access the reason why connection is blocked. + + + + Event relating to a successful consumer registration + or cancellation. + + + Construct an event containing the consumer-tag of + the consumer the event relates to. + + + Access the consumer-tag of the consumer the event + relates to. + + + + Initializes a new instance of the class. + + The tag before. + The tag after. + + + + Gets the tag before. + + + + + Gets the tag after. + + + + Experimental class exposing an IBasicConsumer's + methods as separate events. + + + Constructor which sets the Model property to the + given value. + + + Event fired on HandleBasicDeliver. + + + Event fired on HandleBasicConsumeOk. + + + Event fired on HandleModelShutdown. + + + Event fired on HandleBasicCancelOk. + + + Fires the Unregistered event. + + + Fires the Registered event. + + + Fires the Received event. + + + Fires the Shutdown event. + + + + Event relating to flow control. + + + + + Access the flow control setting. + + + + + Initializes a new instance of the class. + + The name before. + The name after. + + + + Gets the name before. + + + + + Gets the name after. + + + + + Describes an exception that was thrown during + automatic connection recovery performed by the library. + + + + Thrown when the application tries to make use of a + session or connection that has already been shut + down. + + + Construct an instance containing the given + shutdown reason. + + + Thrown when the cause is an + authentication failure. + + + Thrown when no connection could be opened during a + ConnectionFactory.CreateConnection attempt. + + + Construct a BrokerUnreachableException. The inner exception is associated + with only one connection attempt. + + + Thrown when a SessionManager cannot allocate a new + channel number, or the requested channel number is already in + use. + + + + Indicates that there are no more free channels. + + + + + Indicates that the specified channel is in use + + The requested channel number + + + Retrieves the channel number concerned; will + return -1 in the case where "no more free channels" is + being signalled, or a non-negative integer when "channel is + in use" is being signalled. + + + Thrown when a connection to the broker fails + + + + Thrown when a session is destroyed during an RPC call to a + broker. For example, if a TCP connection dropping causes the + destruction of a session in the middle of a QueueDeclare + operation, an OperationInterruptedException will be thrown to + the caller of IModel.QueueDeclare. + + + + Construct an OperationInterruptedException with + the passed-in explanation, if any. + + + Construct an OperationInterruptedException with + the passed-in explanation and prefix, if any. + + + Retrieves the explanation for the shutdown. May + return null if no explanation is available. + + + Thrown to indicate that the peer didn't understand + the packet received from the client. Peer sent default message + describing protocol version it is using and transport parameters. + + + The peer's {'A','M','Q','P',txHi,txLo,major,minor} packet is + decoded into instances of this class. + + + + Fills the new instance's properties with the values passed in. + + + The peer's AMQP specification major version. + + + The peer's AMQP specification minor version. + + + The peer's high transport byte. + + + The peer's low transport byte. + + + Thrown when the likely cause is an + authentication failure. + + + Thrown to indicate that the peer does not support the + wire protocol version we requested immediately after opening + the TCP socket. + + + Fills the new instance's properties with the values passed in. + + + The client's AMQP specification major version. + + + The client's AMQP specification minor version. + + + The peer's AMQP specification major version. + + + The peer's AMQP specification minor version. + + + + Thrown when the model receives an RPC reply that it wasn't expecting. + + + + The unexpected reply method. + + + + Thrown when the model receives an RPC request it cannot satisfy. + + + + The name of the RPC request that could not be sent. + + + Thrown when the model cannot transmit a method field + because the version of the protocol the model is implementing + does not contain a definition for the field in + question. + + + The name of the unsupported field. + + + The name of the method involved. + + + Thrown when the wire-formatting code cannot encode a + particular .NET value to AMQP protocol format. + + + Construct a WireFormattingException with no + particular offender (i.e. null) + + + Construct a WireFormattingException with the given + offender + + + Object which this exception is complaining about; + may be null if no particular offender exists + + + + Application Id. + + + + + Intra-cluster routing identifier (cluster id is deprecated in AMQP 0-9-1). + + + + + MIME content encoding. + + + + + MIME content type. + + + + + Application correlation identifier. + + + + + Non-persistent (1) or persistent (2). + + + + + Message expiration specification. + + + + + Message header field table. Is of type . + + + + + Application message Id. + + + + + Sets to either persistent (2) or non-persistent (1). + + + + + Message priority, 0 to 9. + + + + + Destination to reply to. + + + + + Convenience property; parses property using , + and serializes it using . + Returns null if property cannot be parsed by . + + + + + Message timestamp. + + + + + Message type name. + + + + + User Id. + + + + + Clear the property. + + + + + Clear the property (cluster id is deprecated in AMQP 0-9-1). + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the property. + + + + + Clear the Type property. + + + + + Clear the property. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present (cluster id is deprecated in AMQP 0-9-1). + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the property is present. + + + + + Returns true if the Type property is present. + + + + + Returns true if the UserId property is present. + + + + Sets to either persistent (2) or non-persistent (1). + + + The numbers 1 and 2 for delivery mode are "magic" in that + they appear in the AMQP 0-8 and 0-9 specifications as part + of the definition of the DeliveryMode Basic-class property, + without being defined as named constants. + + + Calling this method causes to take on a value. + In order to reset to the default empty condition, call . + + + + + Thrown when the server sends a frame along a channel + that we do not currently have a Session entry in our + SessionManager for. + + + The channel number concerned. + + + + Retrieve the AMQP class ID of this content header. + + + + + Retrieve the AMQP class name of this content header. + + + + + Fill this instance from the given byte buffer stream. + + + + A type of . + + + + Returns a random item from the list. + + Element item type + Input list + + + + Subclass of ProtocolException representing problems + requiring a connection.close. + + + Socket read timeout, in milliseconds. Zero signals "infinity". + + + Socket write timeout, in milliseconds. Zero signals "infinity". + + + Read a frame from the underlying + transport. Returns null if the read operation timed out + (see Timeout property). + + + Not part of the public API. Extension of IModel to + include utilities and connection-setup routines needed by the + implementation side. + + This interface is used by the API autogeneration + process. The AMQP XML specifications are read by the spec + compilation tool, and after the basic method interface and + implementation classes are generated, this interface is + scanned, and a spec-version-specific implementation is + autogenerated. Annotations are used on certain methods, return + types, and parameters, to customise the details of the + autogeneration process. + + + + + + Sends a Connection.TuneOk. Used during connection + initialisation. + + + Handle incoming Basic.Ack methods. Signals a + BasicAckEvent. + + + Handle incoming Basic.CancelOk methods. + + + Handle incoming Basic.ConsumeOk methods. + + + Handle incoming Basic.Deliver methods. Dispatches + to waiting consumers. + + + Handle incoming Basic.GetEmpty methods. Routes the + information to a waiting Basic.Get continuation. + + Note that the clusterId field is ignored, as in the + specification it notes that it is "deprecated pending + review". + + + + Handle incoming Basic.GetOk methods. Routes the + information to a waiting Basic.Get continuation. + + + Handle incoming Basic.Nack methods. Signals a + BasicNackEvent. + + + Handle incoming Basic.RecoverOk methods + received in reply to Basic.Recover. + + + + Handle incoming Basic.Return methods. Signals a + BasicReturnEvent. + + + Handle an incoming Channel.Close. Shuts down the + session and model. + + + Handle an incoming Channel.CloseOk. + + + Handle incoming Channel.Flow methods. Either + stops or resumes sending the methods that have content. + + + Handle an incoming Connection.Blocked. + + + Handle an incoming Connection.Close. Shuts down the + connection and all sessions and models. + + + Handle an incoming Connection.OpenOk. + + + Handle incoming Connection.Secure + methods. + + + Handle an incoming Connection.Start. Used during + connection initialisation. + + + Handle incoming Connection.Tune + methods. + + + Handle an incominga Connection.Unblocked. + + + Handle incoming Queue.DeclareOk methods. Routes the + information to a waiting Queue.DeclareOk continuation. + + + Used to send a Basic.Cancel method. The public + consume API calls this while also managing internal + datastructures. + + + Used to send a Basic.Consume method. The public + consume API calls this while also managing internal + datastructures. + + + Used to send a Basic.Get. Basic.Get is a special + case, since it can result in a Basic.GetOk or a + Basic.GetEmpty, so this level of manual control is + required. + + + Used to send a Basic.Publish method. Called by the + public publish method after potential null-reference issues + have been rectified. + + + Used to send a Channel.Close. Called during + session shutdown. + + + Used to send a Channel.CloseOk. Called during + session shutdown. + + + Used to send a Channel.FlowOk. Confirms that + Channel.Flow from the broker was processed. + + + Used to send a Channel.Open. Called during session + initialisation. + + + Used to send a Confirm.Select method. The public + confirm API calls this while also managing internal + datastructures. + + + Used to send a Connection.Close. Called during + connection shutdown. + + + Used to send a Connection.CloseOk. Called during + connection shutdown. + + + Used to send a Connection.Open. Called during + connection startup. + + + Used to send a Connection.SecureOk. Again, this is + special, like Basic.Get. + + + Used to send a Connection.StartOk. This is + special, like Basic.Get. + + + Used to send a Exchange.Bind method. Called by the + public bind method. + + + + Used to send a Exchange.Declare method. Called by the + public declare method. + + + + Used to send a Exchange.Delete method. Called by the + public delete method. + + + + Used to send a Exchange.Unbind method. Called by the + public unbind method. + + + + Used to send a Queue.Bind method. Called by the + public bind method. + + + Used to send a Queue.Declare method. Called by the + public declare method. + + + Used to send a Queue.Delete method. Called by the + public delete method. + + + Used to send a Queue.Purge method. Called by the + public purge method. + + + Essential information from an incoming Connection.Tune + method. + + + The peer's suggested channel-max parameter. + + + The peer's suggested frame-max parameter. + + + The peer's suggested heartbeat parameter. + + + + Gets the channel number. + + + + + Gets the close reason. + + + + + Single recipient - no need for multiple handlers to be informed of arriving commands. + + + + + Gets the connection. + + + + + Gets a value indicating whether this session is open. + + + + + Multicast session shutdown event. + + + + Small ISession implementation used only for channel 0. + + + Set channel 0 as quiescing + + Method should be idempotent. Cannot use base.Close + method call because that would prevent us from + sending/receiving Close/CloseOk commands + + + + Thrown when frame parsing code detects an error in the + wire-protocol encoding of a frame. + + For example, potential MalformedFrameException conditions + include frames too short, frames missing their end marker, and + invalid protocol negotiation headers. + + + + + Retrieves the class ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the method ID number of this method, as defined in the AMQP specification XML. + + + + + Retrieves the name of this method - for debugging use. + + + + Only used to kick-start a connection open + sequence. See + + + Broadcasts notification of the final shutdown of the model. + + + Do not call anywhere other than at the end of OnSessionShutdown. + + + Must not be called when m_closeReason == null, because + otherwise there's a window when a new continuation could be + being enqueued at the same time as we're broadcasting the + shutdown event. See the definition of Enqueue() above. + + + + + Handle incoming Connection.Tune + methods. + + + Instances of subclasses of subclasses + HardProtocolException and SoftProtocolException are thrown in + situations when we detect a problem with the connection-, + channel- or wire-level parts of the AMQP protocol. + + + Retrieve the reply code to use in a + connection/channel close method. + + + Retrieve the shutdown details to use in a + connection/channel close method. Defaults to using + ShutdownInitiator.Library, and this.ReplyCode and + this.Message as the reply code and text, + respectively. + + + Small ISession implementation used during channel quiescing. + + + Manages a queue of waiting AMQP RPC requests. + + + Currently, pipelining of requests is forbidden by this + implementation. The AMQP 0-8 and 0-9 specifications themselves + forbid pipelining, but only by the skin of their teeth and + under a somewhat generous reading. + + + + + Enqueue a continuation, marking a pending RPC. + + + Continuations are retrieved in FIFO order by calling Next(). + + + In the current implementation, only one continuation can + be queued up at once. Calls to Enqueue() when a + continuation is already enqueued will result in + NotSupportedException being thrown. + + + + + Interrupt all waiting continuations. + + + There's just the one potential waiter in the current + implementation. + + + + + Retrieve the next waiting continuation. + + + It is an error to call this method when there are no + waiting continuations. In the current implementation, if + this happens, null will be returned (which will usually + result in an immediate NullPointerException in the + caller). Correct code will always arrange for a + continuation to have been Enqueue()d before calling this + method. + + + + + Normal ISession implementation used during normal channel operation. + + + Called from CheckAutoClose, in a separate thread, + when we decide to close the connection. + + + If m_autoClose and there are no active sessions + remaining, Close()s the connection with reason code + 200. + + + Replace an active session slot with a new ISession + implementation. Used during channel quiescing. + + Make sure you pass in a channelNumber that's currently in + use, as if the slot is unused, you'll get a null pointer + exception. + + + + Subclass of ProtocolException representing problems + requiring a channel.close. + + + Thrown when our peer sends a frame that contains + illegal values for one or more fields. + + + + Thrown when the connection receives a frame that it wasn't expecting. + + + + + Thrown when the protocol handlers detect an unknown class + number or method number. + + + + The AMQP content-class ID. + + + The AMQP method ID within the content-class, or 0 if none. + + + Reads an AMQP "table" definition from the reader. + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t, + x and V types and the AMQP 0-9-1 A type. + + A . + + + Writes an AMQP "table" to the writer. + + + In this method, we assume that the stream that backs our + NetworkBinaryWriter is a positionable stream - which it is + currently (see Frame.m_accumulator, Frame.GetWriter and + Command.Transmit). + + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t + x and V types and the AMQP 0-9-1 A type. + + + + + Writes an AMQP "table" to the writer. + + + In this method, we assume that the stream that backs our + NetworkBinaryWriter is a positionable stream - which it is + currently (see Frame.m_accumulator, Frame.GetWriter and + Command.Transmit). + + + Supports the AMQP 0-8/0-9 standard entry types S, I, D, T + and F, as well as the QPid-0-8 specific b, d, f, l, s, t + x and V types and the AMQP 0-9-1 A type. + + + + + + Implement for WinRT. The significant + difference is that TcpClient is not available and the new + needs to be used. + + + + Base class for attributes for controlling the API + autogeneration process. + + + The specification namespace (i.e. version) that + this attribute applies to, or null for all specification + versions. + + + Causes the API generator to ignore the attributed method. + + Mostly used to declare convenience overloads of + various AMQP methods in the IModel interface. Also used + to omit an autogenerated implementation of a method which + is not required for one protocol version. The API + autogeneration process should of course not attempt to produce + an implementation of the convenience methods, as they will be + implemented by hand with sensible defaults, delegating to the + autogenerated variant of the method concerned. + + + Causes the API generator to generate asynchronous + receive code for the attributed method. + + + Causes the API generator to generate + exception-throwing code for, instead of simply ignoring, the + attributed method. + + + + + Informs the API generator which AMQP method field to + use for either a parameter in a request, or for a simple result + in a reply. + + + Informs the API generator which AMQP method to use for + either a request (if applied to an IModel method) or a reply + (if applied to an IModel method result). + + + This attribute, if placed on a parameter in an IModel + method, causes it to be interpreted as a "nowait" parameter for + the purposes of autogenerated RPC reply continuation management + and control. + + + This attribute, if placed on a method in IModel, + causes the method to be interpreted as a factory method + producing a protocol-specific implementation of a common + content header interface. + + + This attribute, if placed on a parameter in a + content-carrying IModel method, causes it to be sent as part of + the content header frame. + + + This attribute, if placed on a parameter in a + content-carrying IModel method, causes it to be sent as part of + the content body frame. + + + This attribute, placed on an IModel method, causes + what would normally be an RPC, sent with ModelRpc, to be sent + as if it were oneway, with ModelSend. The assumption that this + is for a custom continuation (e.g. for BasicConsume/BasicCancel + etc.) + + + + Implements a simple RPC client. + + + This class sends requests that can be processed by remote + SimpleRpcServer instances. + + + The basic pattern for accessing a remote service is to + determine the exchange name and routing key needed for + submissions of service requests, and to construct a + SimpleRpcClient instance using that address. Once constructed, + the various Call() and Cast() overloads can be used to send + requests and receive the corresponding replies. + + + string queueName = "ServiceRequestQueue"; // See also Subscription ctors + using (IConnection conn = new ConnectionFactory() + .CreateConnection(serverAddress)) { + using (IModel ch = conn.CreateModel()) { + SimpleRpcClient client = + new SimpleRpcClient(ch, queueName); + client.TimeoutMilliseconds = 5000; // optional + + /// ... make use of the various Call() overloads + } + } + + + Instances of this class declare a queue, so it is the user's + responsibility to ensure that the exchange concerned exists + (using IModel.ExchangeDeclare) before invoking Call() or + Cast(). + + + This class implements only a few basic RPC message formats - + to extend it with support for more formats, either subclass, + or transcode the messages before transmission using the + built-in byte[] format. + + + + + + Construct an instance with no configured + Address. The Address property must be set before Call() or + Cast() are called. + + + Construct an instance that will deliver to the + default exchange (""), with routing key equal to the passed + in queueName, thereby delivering directly to a named queue + on the AMQP server. + + + Construct an instance that will deliver to the + named and typed exchange, with the given routing + key. + + + Construct an instance that will deliver to the + given address. + + + This event is fired whenever Call() detects the + disconnection of the underlying Subscription while waiting + for a reply from the service. + + See also OnDisconnected(). Note that the sending of a + request may result in OperationInterruptedException before + the request is even sent. + + + + This event is fired whenever Call() decides that a + timeout has occurred while waiting for a reply from the + service. + + See also OnTimedOut(). + + + + Retrieve or modify the address that will be used + for the next Call() or Cast(). + + This address represents the service, i.e. the destination + service requests should be published to. It can be changed + at any time before a Call() or Cast() request is sent - + the value at the time of the call is used by Call() and + Cast(). + + + + Retrieve the IModel this instance uses to communicate. + + + Retrieve the Subscription that is used to receive + RPC replies corresponding to Call() RPC requests. May be + null. + + + Upon construction, this property will be null. It is + initialised by the protected virtual method + EnsureSubscription upon the first call to Call(). Calls to + Cast() do not initialise the subscription, since no + replies are expected or possible when using Cast(). + + + + + Retrieve or modify the timeout (in milliseconds) + that will be used for the next Call(). + + + This property defaults to + System.Threading.Timeout.Infinite (i.e. -1). If it is set + to any other value, Call() will only wait for the + specified amount of time before returning indicating a + timeout. + + + See also TimedOut event and OnTimedOut(). + + + + + Sends a "jms/stream-message"-encoded RPC request, + and expects an RPC reply in the same format. + + + The arguments passed in must be of types that are + representable as JMS StreamMessage values, and so must the + results returned from the service in its reply message. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + + + Sends a simple byte[] message, without any custom + headers or properties. + + + Delegates directly to Call(IBasicProperties, byte[]), and + discards the properties of the received reply, returning + only the body of the reply. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + Sends a byte[] message and IBasicProperties + header, returning both the body and headers of the received + reply. + + + Sets the "replyProperties" outbound parameter to the + properties of the received reply, and returns the byte[] + body of the reply. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Both sets "replyProperties" to null and returns null when + either the request timed out or we were disconnected + before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + Sends a byte[]/IBasicProperties RPC request, + returning full information about the delivered reply as a + BasicDeliverEventArgs. + + + This is the most general/lowest-level Call()-style method + on SimpleRpcClient. It sets CorrelationId and ReplyTo on + the request message's headers before transmitting the + request to the service via the AMQP server. If the reply's + CorrelationId does not match the request's CorrelationId, + ProtocolViolationException will be thrown. + + + Calls OnTimedOut() and OnDisconnected() when a timeout or + disconnection, respectively, is detected when waiting for + our reply. + + + Returns null if the request timed out or if we were + disconnected before a reply arrived. + + + The reply message, if any, is acknowledged to the AMQP + server via Subscription.Ack(). + + + + + + Sends an asynchronous/one-way message to the + service. + + + Close the reply subscription associated with this instance, if any. + + Simply delegates to calling Subscription.Close(). Clears + the Subscription property, so that subsequent Call()s, if + any, will re-initialize it to a fresh Subscription + instance. + + + + Signals that the Subscription we use for receiving + our RPC replies was disconnected while we were + waiting. + + Fires the Disconnected event. + + + + Signals that the configured timeout fired while + waiting for an RPC reply. + + Fires the TimedOut event. + + + + Implement the IDisposable interface, permitting + SimpleRpcClient instances to be used in using + statements. + + + Should initialise m_subscription to be non-null + and usable for fetching RPC replies from the service + through the AMQP server. + + + Retrieves the reply for the request with the given + correlation ID from our internal Subscription. + + Currently requires replies to arrive in the same order as + the requests were sent out. Subclasses may override this + to provide more sophisticated behaviour. + + + + Implements a simple RPC service, responding to + requests received via a Subscription. + + + This class interprets requests such as those sent by instances + of SimpleRpcClient. + + + The basic pattern for implementing a service is to subclass + SimpleRpcServer, overriding HandleCall and HandleCast as + appropriate, and then to create a Subscription object for + receiving requests from clients, and start an instance of the + SimpleRpcServer subclass with the Subscription. + + + string queueName = "ServiceRequestQueue"; // See also Subscription ctors + using (IConnection conn = new ConnectionFactory() + .CreateConnection(serverAddress)) { + using (IModel ch = conn.CreateModel()) { + Subscription sub = new Subscription(ch, queueName); + new MySimpleRpcServerSubclass(sub).MainLoop(); + } + } + + + Note that this class itself does not declare any resources + (exchanges, queues or bindings). The Subscription we use for + receiving RPC requests should have already declared all the + resources we need. See the Subscription constructors and the + Subscription.Bind method. + + + If you are implementing a service that responds to + "jms/stream-message"-formatted requests (as implemented by + RabbitMQ.Client.Content.IStreamMessageReader), override + HandleStreamMessageCall. Otherwise, override HandleSimpleCall + or HandleCall as appropriate. Asynchronous, one-way requests + are dealt with by HandleCast etc. + + + Every time a request is successfully received and processed + within the server's MainLoop, the request message is Ack()ed + using Subscription.Ack before the next request is + retrieved. This causes the Subscription object to take care of + acknowledging receipt and processing of the request message. + + + If transactional service is enabled, via SetTransactional(), + then after every successful ProcessRequest, IModel.TxCommit is + called. Making use of transactional service has effects on all + parts of the application that share an IModel instance, + completely changing the style of interaction with the AMQP + server. For this reason, it is initially disabled, and must be + explicitly enabled with a call to SetTransactional(). Please + see the documentation for SetTransactional() for details. + + + To stop a running RPC server, call Close(). This will in turn + Close() the Subscription, which will cause MainLoop() to + return to its caller. + + + Unless overridden, ProcessRequest examines properties in the + request content header, and uses them to dispatch to one of + the Handle[...]() methods. See the documentation for + ProcessRequest and each Handle[...] method for details. + + + + + + Create, but do not start, an instance that will + receive requests via the given Subscription. + + + The instance is initially in non-transactional mode. See + SetTransactional(). + + + Call MainLoop() to start the request-processing loop. + + + + + Returns true if we are in "transactional" mode, or + false if we are not. + + + Shut down the server, causing MainLoop() to return + to its caller. + + Acts by calling Close() on the server's Subscription object. + + + + Called by ProcessRequest(), this is the most + general method that handles RPC-style requests. + + + This method should map requestProperties and body to + replyProperties and the returned byte array. + + + The default implementation checks + requestProperties.ContentType, and if it is + "jms/stream-message" (i.e. the current value of + StreamMessageBuilder.MimeType), parses it using + StreamMessageReader and delegates to + HandleStreamMessageCall before encoding and returning the + reply. If the ContentType is any other value, the request + is passed to HandleSimpleCall instead. + + + The isRedelivered flag is true when the server knows for + sure that it has tried to send this request previously + (although not necessarily to this application). It is not + a reliable indicator of previous receipt, however - the + only claim it makes is that a delivery attempt was made, + not that the attempt succeeded. Be careful if you choose + to use the isRedelivered flag. + + + + + Called by ProcessRequest(), this is the most + general method that handles asynchronous, one-way + requests. + + + The default implementation checks + requestProperties.ContentType, and if it is + "jms/stream-message" (i.e. the current value of + StreamMessageBuilder.MimeType), parses it using + StreamMessageReader and delegates to + HandleStreamMessageCall, passing in null as the + replyWriter parameter to indicate that no reply is desired + or possible. If the ContentType is any other value, the + request is passed to HandleSimpleCast instead. + + + The isRedelivered flag is true when the server knows for + sure that it has tried to send this request previously + (although not necessarily to this application). It is not + a reliable indicator of previous receipt, however - the + only claim it makes is that a delivery attempt was made, + not that the attempt succeeded. Be careful if you choose + to use the isRedelivered flag. + + + + + Called by the default HandleCall() implementation + as a fallback. + + If the MIME ContentType of the request did not match any + of the types specially recognised + (e.g. "jms/stream-message"), this method is called instead + with the raw bytes of the request. It should fill in + replyProperties (or set it to null) and return a byte + array to send back to the remote caller as a reply + message. + + + + Called by the default HandleCast() implementation + as a fallback. + + If the MIME ContentType of the request did not match any + of the types specially recognised + (e.g. "jms/stream-message"), this method is called instead + with the raw bytes of the request. + + + + Called by HandleCall and HandleCast when a + "jms/stream-message" request is received. + + + The args array contains the values decoded by HandleCall + or HandleCast. + + + The replyWriter parameter will be null if we were called + from HandleCast, in which case a reply is not expected or + possible, or non-null if we were called from + HandleCall. Use the methods of replyWriter in this case to + assemble your reply, which will be sent back to the remote + caller. + + + This default implementation does nothing, which + effectively sends back an empty reply to any and all + remote callers. + + + + + Enters the main loop of the RPC service. + + + Retrieves requests repeatedly from the service's + subscription. Each request is passed to + ProcessRequest. Once ProcessRequest returns, the request + is acknowledged via Subscription.Ack(). If transactional + mode is enabled, TxCommit is then called. Finally, the + loop begins again. + + + Runs until the subscription ends, which happens either as + a result of disconnection, or of a call to Close(). + + + + + Process a single request received from our + subscription. + + + If the request's properties contain a non-null, non-empty + CorrelationId string (see IBasicProperties), it is assumed + to be a two-way call, requiring a response. The ReplyTo + header property is used as the reply address (via + PublicationAddress.Parse, unless that fails, in which case it + is treated as a simple queue name), and the request is + passed to HandleCall(). + + + If the CorrelationId is absent or empty, the request is + treated as one-way asynchronous event, and is passed to + HandleCast(). + + + Usually, overriding HandleCall(), HandleCast(), or one of + their delegates is sufficient to implement a service, but + in some cases overriding ProcessRequest() is + required. Overriding ProcessRequest() gives the + opportunity to implement schemes for detecting interaction + patterns other than simple request/response or one-way + communication. + + + + + Enables transactional mode. + + + Once enabled, transactional mode is not only enabled for + all users of the underlying IModel instance, but cannot be + disabled without shutting down the entire IModel (which + involves shutting down all the services depending on it, + and should not be undertaken lightly). + + + This method calls IModel.TxSelect, every time it is + called. (TxSelect is idempotent, so this is harmless.) + + + + + Implement the IDisposable interface, permitting + SimpleRpcServer instances to be used in using + statements. + + + Manages a subscription to a queue. + + + This convenience class abstracts away from much of the detail + involved in receiving messages from a queue. + + + Once created, the Subscription consumes from a queue (using a + EventingBasicConsumer). Received deliveries can be retrieved + by calling Next(), or by using the Subscription as an + IEnumerator in, for example, a foreach loop. + + + Note that if the "noAck" option is enabled (which it is by + default), then received deliveries are automatically acked + within the server before they are even transmitted across the + network to us. Calling Ack() on received events will always do + the right thing: if "noAck" is enabled, nothing is done on an + Ack() call, and if "noAck" is disabled, IModel.BasicAck() is + called with the correct parameters. + + + + + Creates a new Subscription in "noAck" mode, + consuming from a named queue. + + + Creates a new Subscription, with full control over + both "noAck" mode and the name of the queue. + + + Creates a new Subscription, with full control over + both "noAck" mode, the name of the queue, and the consumer tag. + + + Retrieve the IBasicConsumer that is receiving the + messages from the server for us. Normally, you will not + need to access this property - use Next() and friends + instead. + + + Retrieve the consumer-tag that this subscription + is using. Will usually be a server-generated + name. + + + Returns the most recent value returned by Next(), + or null when either no values have been retrieved yet, the + end of the subscription has been reached, or the most + recent value has already been Ack()ed. See also the + documentation for Ack(). + + + Retrieve the IModel our subscription is carried by. + + + Returns true if we are in "noAck" mode, where + calls to Ack() will be no-ops, and where the server acks + messages before they are delivered to us. Returns false if + we are in a mode where calls to Ack() are required, and + where such calls will actually send an acknowledgement + message across the network to the server. + + + Retrieve the queue name we have subscribed to. + + + Implementation of the IEnumerator interface, for + permitting Subscription to be used in foreach + loops. + + + As per the IEnumerator interface definition, throws + InvalidOperationException if LatestEvent is null. + + + Does not acknowledge any deliveries at all. Ack() must be + called explicitly on received deliveries. + + + + + If LatestEvent is non-null, passes it to + Ack(BasicDeliverEventArgs). Causes LatestEvent to become + null. + + + If we are not in "noAck" mode, calls + IModel.BasicAck with the delivery-tag from ; + otherwise, sends nothing to the server. if is the same as LatestEvent + by pointer comparison, sets LatestEvent to null. + + + Passing an event that did not originate with this Subscription's + channel, will lead to unpredictable behaviour + + + + Closes this Subscription, cancelling the consumer + record in the server. + + + If LatestEvent is non-null, passes it to + Nack(BasicDeliverEventArgs, false, requeue). Causes LatestEvent to become + null. + + + If LatestEvent is non-null, passes it to + Nack(BasicDeliverEventArgs, multiple, requeue). Causes LatestEvent to become + null. + + + If we are not in "noAck" mode, calls + IModel.BasicNack with the delivery-tag from ; + otherwise, sends nothing to the server. if is the same as LatestEvent + by pointer comparison, sets LatestEvent to null. + + + Passing an event that did not originate with this Subscription's + channel, will lead to unpredictable behaviour + + + + Retrieves the next incoming delivery in our + subscription queue. + + + Returns null when the end of the stream is reached and on + every subsequent call. End-of-stream can arise through the + action of the Subscription.Close() method, or through the + closure of the IModel or its underlying IConnection. + + + Updates LatestEvent to the value returned. + + + Does not acknowledge any deliveries at all (but in "noAck" + mode, the server will have auto-acknowledged each event + before it is even sent across the wire to us). + + + + + Retrieves the next incoming delivery in our + subscription queue, or times out after a specified number + of milliseconds. + + + Returns false only if the timeout expires before either a + delivery appears or the end-of-stream is reached. If false + is returned, the out parameter "result" is set to null, + but LatestEvent is not updated. + + + Returns true to indicate a delivery or the end-of-stream. + + + If a delivery is already waiting in the queue, or one + arrives before the timeout expires, it is removed from the + queue and placed in the "result" out parameter. If the + end-of-stream is detected before the timeout expires, + "result" is set to null. + + + Whenever this method returns true, it updates LatestEvent + to the value placed in "result" before returning. + + + End-of-stream can arise through the action of the + Subscription.Close() method, or through the closure of the + IModel or its underlying IConnection. + + + This method does not acknowledge any deliveries at all + (but in "noAck" mode, the server will have + auto-acknowledged each event before it is even sent across + the wire to us). + + + A timeout of -1 (i.e. System.Threading.Timeout.Infinite) + will be interpreted as a command to wait for an + indefinitely long period of time for an item or the end of + the stream to become available. Usage of such a timeout is + equivalent to calling Next() with no arguments (modulo + predictable method signature differences). + + + + + Implementation of the IDisposable interface, + permitting Subscription to be used in using + statements. Simply calls Close(). + + + Implementation of the IEnumerable interface, for + permitting Subscription to be used in foreach + loops. + + + Implementation of the IEnumerator interface, for + permitting Subscription to be used in foreach + loops. + + + Does not acknowledge any deliveries at all. Ack() must be + called explicitly on received deliveries. + + + + + Dummy implementation of the IEnumerator interface, + for permitting Subscription to be used in foreach loops; + Reset()ting a Subscription doesn't make sense, so this + method always throws InvalidOperationException. + + + A thread-safe single-assignment reference cell. + + A fresh BlockingCell holds no value (is empty). Any thread + reading the Value property when the cell is empty will block + until a value is made available by some other thread. The Value + property can only be set once - on the first call, the + BlockingCell is considered full, and made immutable. Further + attempts to set Value result in a thrown + InvalidOperationException. + + + + Retrieve the cell's value, blocking if none exists + at present, or supply a value to an empty cell, thereby + filling it. + + + + Return valid timeout value + If value of the parameter is less then zero, return 0 + to mean infinity + + + Retrieve the cell's value, waiting for the given + timeout if no value is immediately available. + + + If a value is present in the cell at the time the call is + made, the call will return immediately. Otherwise, the + calling thread blocks until either a value appears, or + operation times out. + + + If no value was available before the timeout, an exception + is thrown. + + + + + Retrieve the cell's value, waiting for the given + timeout if no value is immediately available. + + + If a value is present in the cell at the time the call is + made, the call will return immediately. Otherwise, the + calling thread blocks until either a value appears, or + operation times out. + + + If no value was available before the timeout, an exception + is thrown. + + + + + Miscellaneous debugging and development utilities. + + Not part of the public API. + + + + Print a hex dump of the supplied bytes to the supplied TextWriter. + + + Prints an indented key/value pair; used by DumpProperties() + Recurses into the value using DumpProperties(). + + + Dump properties of objects to the supplied writer. + + + Used internally by class Either. + + + Models the disjoint union of two alternatives, a + "left" alternative and a "right" alternative. + Borrowed from ML, Haskell etc. + + + Private constructor. Use the static methods Left, Right instead. + + + Retrieve the alternative represented by this instance. + + + Retrieve the value carried by this instance. + + + Constructs an Either instance representing a Left alternative. + + + Constructs an Either instance representing a Right alternative. + + + A class for allocating integer IDs in a given range. + + + A class representing a list of inclusive intervals + Creates an IntAllocator allocating integer IDs within the inclusive range [start, end] + + + Allocate a fresh integer from the range, or return -1 if no more integers + are available. This operation is guaranteed to run in O(1) + + + Make the provided integer available for allocation again. This operation + runs in amortized O(sqrt(range size)) time: About every sqrt(range size) + operations will take O(range_size + number of intervals) to complete and + the rest run in constant time. + + No error checking is performed, so if you double Free or Free an integer + that was not originally Allocated the results are undefined. Sorry. + + + + Subclass of BinaryReader that reads integers etc in correct network order. + + + + Kludge to compensate for .NET's broken little-endian-only BinaryReader. + Relies on BinaryReader always being little-endian. + + + + + + Construct a NetworkBinaryReader over the given input stream. + + + + + Construct a NetworkBinaryReader over the given input + stream, reading strings using the given encoding. + + + + Helper method for constructing a temporary + BinaryReader over a byte[]. + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Override BinaryReader's method for network-order. + + + + + Subclass of BinaryWriter that writes integers etc in correct network order. + + + +

+ Kludge to compensate for .NET's broken little-endian-only BinaryWriter. +

+ See also NetworkBinaryReader. +

+
+
+ + + Construct a NetworkBinaryWriter over the given input stream. + + + + + Construct a NetworkBinaryWriter over the given input + stream, reading strings using the given encoding. + + + + Helper method for constructing a temporary + BinaryWriter streaming into a fresh MemoryStream + provisioned with the given initialSize. + + + Helper method for extracting the byte[] contents + of a BinaryWriter over a MemoryStream, such as constructed + by TemporaryBinaryWriter. + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + + Override BinaryWriter's method for network-order. + + + + A thread-safe shared queue implementation. + + + A thread-safe shared queue implementation. + + + Flag holding our current status. + + + The shared queue. + + Subclasses must ensure appropriate locking discipline when + accessing this field. See the implementation of Enqueue, + Dequeue. + + + + Close the queue. Causes all further Enqueue() + operations to throw EndOfStreamException, and all pending + or subsequent Dequeue() operations to throw an + EndOfStreamException once the queue is empty. + + + Retrieve the first item from the queue, or block if none available + + Callers of Dequeue() will block if no items are available + until some other thread calls Enqueue() or the queue is + closed. In the latter case this method will throw + EndOfStreamException. + + + + + Asynchronously retrieves the first item from the queue. + + + + Retrieve the first item from the queue, or return + nothing if no items are available after the given + timeout + + + If one or more items are present on the queue at the time + the call is made, the call will return + immediately. Otherwise, the calling thread blocks until + either an item appears on the queue, or + millisecondsTimeout milliseconds have elapsed. + + + Returns true in the case that an item was available before + the timeout, in which case the out parameter "result" is + set to the item itself. + + + If no items were available before the timeout, returns + false, and sets "result" to null. + + + A timeout of -1 (i.e. System.Threading.Timeout.Infinite) + will be interpreted as a command to wait for an + indefinitely long period of time for an item to become + available. Usage of such a timeout is equivalent to + calling Dequeue() with no arguments. See also the MSDN + documentation for + System.Threading.Monitor.Wait(object,int). + + + If no items are present and the queue is in a closed + state, or if at any time while waiting the queue + transitions to a closed state (by a call to Close()), this + method will throw EndOfStreamException. + + + + + Retrieve the first item from the queue, or return + defaultValue immediately if no items are + available + + + If one or more objects are present in the queue at the + time of the call, the first item is removed from the queue + and returned. Otherwise, the defaultValue that was passed + in is returned immediately. This defaultValue may be null, + or in cases where null is part of the range of the queue, + may be some other sentinel object. The difference between + DequeueNoWait() and Dequeue() is that DequeueNoWait() will + not block when no items are available in the queue, + whereas Dequeue() will. + + + If at the time of call the queue is empty and in a + closed state (following a call to Close()), then this + method will throw EndOfStreamException. + + + + + Place an item at the end of the queue. + + If there is a thread waiting for an item to arrive, the + waiting thread will be woken, and the newly Enqueued item + will be passed to it. If the queue is closed on entry to + this method, EndOfStreamException will be thrown. + + + + Implementation of the IEnumerable interface, for + permitting SharedQueue to be used in foreach + loops. + + + Implementation of the IEnumerable interface, for + permitting SharedQueue to be used in foreach + loops. + + + Call only when the lock on m_queue is held. + + + + Implementation of the IEnumerator interface, for + permitting SharedQueue to be used in foreach loops. + + + Construct an enumerator for the given + SharedQueue. + + + Reset()ting a SharedQueue doesn't make sense, so + this method always throws + InvalidOperationException. + + + + Represents a collection of associated keys and values + that are sorted by the keys and are accessible by key + and by index. + + + + + Provides a mechanism for executing a method at specified intervals. Adapts to on Windows 8+ platforms. + + + + + Changes the start time and the interval between method invocations for a timer, using 32-bit signed integers to measure time intervals. + + + The amount of time to delay before the invoking the callback method specified when the Timer was constructed, in milliseconds. Specify Timeout.Infinite to prevent the timer from restarting. Specify zero (0) to restart the timer immediately. + + + The time interval between invocations of the callback method specified when the Timer was constructed, in milliseconds. Specify Timeout.Infinite to disable periodic signaling. + + true if the timer was successfully updated; otherwise, false. + +
+

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 z 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 literal 0 HcmV?d00001 diff --git a/packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.dll b/packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..d2a564f6ec01ee6557d9d6252f1e4d3d9dc86c93 GIT binary patch literal 265728 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 literal 0 HcmV?d00001 diff --git a/packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.xml b/packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.xml new file mode 100644 index 00000000..8edcd324 --- /dev/null +++ b/packages/RabbitMQ.Client.3.6.9/lib/net45/RabbitMQ.Client.xml @@ -0,0 +1,6743 @@ + + + + RabbitMQ.Client + + + +