这2天把PetShop4好好研究了一下,PetShop的架构不错,学习了不少,十分感谢张逸和他的“软件设计精要与模式”。不过有几个地方请大家注意。如下:
1。为什么没有ORM之类的工具,在网上看到有朋友说是因为微软没有自己的ORM所以没有在PS4中加入。
2。要操作数据库事务时,也就是在提交定单时,如果不启动相应的事务服务会报错的。所以要 启动 Distributed Transaction Coordinator 服务,方法和说明如下:
“本主题中的某些过程使用 System.Transactions 程序集内的类型。在按照这些过程操作之前,必须确保要运行单元测试的计算机上正在运行 Distributed Transaction Coordinator 服务。否则,测试将失败,并出现下面的错误消息:“测试方法 项目名称.测试名称.方法名称 引发异常: System.Data.SqlClient.SqlException: 服务器‘计算机名称’上的 MSDTC 不可用”。
启动 Distributed Transaction Coordinator 服务
1.打开“控制面板”。
2.在“控制面板”中打开“管理工具”。
3.在“管理工具”中打开“服务”。
4.在“服务”窗格中,右击“分布式事务处理协调器”服务,再单击“启动”。
该服务的状态应当更新为“已启动”。现在应当能够运行那些使用 System.Transactions 的单元测试。”
3。在调试异步数据库时,设置消息队列时。
<add key="OrderQueuePath" value=".\Private$\PSOrders"/>
我只能设置本机的消息队列 ,而象
<add key="OrderQueuePath" value="FormatName:DIRECT=TCP:127.0.0.1\Private$\PSOrders"/>这样访问其它机器上的消息队列时,就会报错“无法确定具有指定格式名的队列是否存在 ”
请达人帮忙解决,谢谢
4。在运用异步数据时,不会自动创建相应的消息列表,我修改了一下CODE,可以自动的创建消息列表,见14-17行
5。还有要说的是运用异步数据时,系统要装有消息列表。(注:在安装系统时,WINDOWS不会安装消息队列组件)
3、4、5为数据访问层之消息处理,也就是异步数据和消息队列的内容
1。为什么没有ORM之类的工具,在网上看到有朋友说是因为微软没有自己的ORM所以没有在PS4中加入。
2。要操作数据库事务时,也就是在提交定单时,如果不启动相应的事务服务会报错的。所以要 启动 Distributed Transaction Coordinator 服务,方法和说明如下:
“本主题中的某些过程使用 System.Transactions 程序集内的类型。在按照这些过程操作之前,必须确保要运行单元测试的计算机上正在运行 Distributed Transaction Coordinator 服务。否则,测试将失败,并出现下面的错误消息:“测试方法 项目名称.测试名称.方法名称 引发异常: System.Data.SqlClient.SqlException: 服务器‘计算机名称’上的 MSDTC 不可用”。
启动 Distributed Transaction Coordinator 服务
1.打开“控制面板”。
2.在“控制面板”中打开“管理工具”。
3.在“管理工具”中打开“服务”。
4.在“服务”窗格中,右击“分布式事务处理协调器”服务,再单击“启动”。
该服务的状态应当更新为“已启动”。现在应当能够运行那些使用 System.Transactions 的单元测试。”
3。在调试异步数据库时,设置消息队列时。
<add key="OrderQueuePath" value=".\Private$\PSOrders"/>
我只能设置本机的消息队列 ,而象
<add key="OrderQueuePath" value="FormatName:DIRECT=TCP:127.0.0.1\Private$\PSOrders"/>这样访问其它机器上的消息队列时,就会报错“无法确定具有指定格式名的队列是否存在 ”
请达人帮忙解决,谢谢
4。在运用异步数据时,不会自动创建相应的消息列表,我修改了一下CODE,可以自动的创建消息列表,见14-17行
1
namespace PetShop.MSMQMessaging {
2
/// <summary>
3
/// This could be a base class for all PetShop MSMQ messaging implementation as
4
/// it provides a basic implementation for sending and receving messages to and from transactional queue
5
/// </summary>
6
public class PetShopQueue : IDisposable {
7![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
protected MessageQueueTransactionType transactionType = MessageQueueTransactionType.Automatic;
9![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
protected MessageQueue queue;
11
protected TimeSpan timeout;
12![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
public PetShopQueue(string queuePath, int timeoutSeconds) {
14
if (!MessageQueue.Exists(queuePath))
15
{
16
// Create the queue if it does not exist.
17
queue = MessageQueue.Create(queuePath, true);
18
}
19
else
20
{
21![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
queue = new MessageQueue(queuePath);
23
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5。还有要说的是运用异步数据时,系统要装有消息列表。(注:在安装系统时,WINDOWS不会安装消息队列组件)
3、4、5为数据访问层之消息处理,也就是异步数据和消息队列的内容