小编Lie*_*oen的帖子

架构排队asp.NET - MSMQ

问题:大约300名候选人使用Flex进行测试.测试包括大约100个练习.每次练习后,都会调用.NET服务来存储结果.如果候选人完成测试,他/她的测试的所有数据都被Asp.NET非规范化.这种非规范化可能需要一些cpu,可能需要5到10秒.现在,大多数时候,一些候选人比其他人更早完成了测试,但仍有大约200人等到他们的时间到了.在那一刻,200名候选人完成了他们的考试,200名会议同时被非正规化.此时,服务器负载(cpu)太高并导致调用Web服务器出错.现在,我不想同时对所有这些会话进行规范化,而是希望使用MSMQ将它们添加到队列中.

题:

  • 你如何处理队列?
  • 您是否在global.asax的Application_Start中启动一个单独的线程来侦听队列?如果有消息,那么它们就会被发送一个消息.
  • 是否有必要在单独的线程中执行此操作?如果在global.asax中你只是调用一个单例来开始监听队列怎么办?这个单身人士会在哪个线程中运行?(调用global.asax的线程是什么)
  • 实现此目的的最佳实践是什么?链接?资源?教程?例子?
  • 我不喜欢这个想法,但是你可以在你的网站的根目录上放一个exe,一个启动进程监听队列的exe ...
  • 如果您从队列中收到消息,那么在拔出它时是删除它还是如果此会话的非规范化成功将其删除?如果你拔出它时出现问题......
  • 我也可以在内存中创建自己的队列,但重新启动网络服务器会清空队列,很多会话最终都没有正常化,所以我想这真是一个坏主意.
    • MSMQ是一个不错的选择还是有更好的选择?

asp.net msmq

6
推荐指数
1
解决办法
2960
查看次数

MSMQ上的私人和公共队列

服务器A是否可以从服务器B访问专用队列?

msmq

6
推荐指数
1
解决办法
6107
查看次数

有没有办法让MsBuild使用代码合同运行静态契约分析?

在我的项目中,静态检查被禁用,但是当我使用cmd运行msbuild.exe时,它会开始对每个项目进行静态检查...有没有办法,带参数来禁用它?

msbuild code-contracts

6
推荐指数
1
解决办法
1860
查看次数

WPF System.InvalidOperationException:调用线程无法访问此对象,因为另一个线程拥有它

在我的Windows中,我有一个TextBox,我喜欢从另一个线程更新(文本属性).这样做时,我得到InvalidOperationException(参见标题).我在谷歌发现了不同的链接解释这一点,但我似乎仍然无法使它工作.

我试过的是这个:

Window1代码:

private static Window1 _myWindow;
private MessageQueueTemplate _messageQueueTemplate;
private const string LocalTemplateName = "LocalExamSessionAccessCodeMessageQueueTemplate";
private const string RemoteTemplateName = "RemoteExamSessionAccessCodeMessageQueueTemplate";

...
public Window1()
{
    InitializeComponent();
    _myWindow = this;
}

public static Window1 MyWindow
{
    get
    {
        return _myWindow;
    }
}

public void LogText(string text)
{
    informationTextBox.Text += text + Environment.NewLine;
}
...
Run Code Online (Sandbox Code Playgroud)

在另一个类(实际上是一个spring.NET Listener适配器,监听某个队列,在另一个线程中启动).

var thread = new Thread(
    new ThreadStart(
        delegate()
            {
                Window1.MyWindow.Dispatcher.Invoke(
                    System.Windows.Threading.DispatcherPriority.Normal,
                    new Action(
                        delegate()
                            {
                                Window1.MyWindow.LogText(text);
                            }
                        ));
            }
        ));
Run Code Online (Sandbox Code Playgroud)

它不会引发错误,但在窗口1的LogText法文本没有被触发,因此文本没有更新.

所以基本上,我想从另一个线程中运行的另一个类更新这个TextBox组件.

wpf multithreading

6
推荐指数
1
解决办法
5423
查看次数

新的 Ruby 1.9 哈希语法

new_hash = {:simon => "Talek", :lorem => "Ipsum"}
Run Code Online (Sandbox Code Playgroud)

可以替换为

new_hash = {simon: "Talek", lorem: "Ipsum"}
Run Code Online (Sandbox Code Playgroud)

还有更短的写法吗

:on => :collection
Run Code Online (Sandbox Code Playgroud)

应用相同的逻辑会引发错误:

on: :collection
Run Code Online (Sandbox Code Playgroud)

更新以提供更多信息:

在我的 routes.rb 中:

get 'detail', { on: :member } 
Run Code Online (Sandbox Code Playgroud)

不起作用。也没有

get 'detail',  on: :member 
Run Code Online (Sandbox Code Playgroud)

错误:

Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23: 
  syntax error, unexpected ':'

      get 'detail', { on: :member }
Run Code Online (Sandbox Code Playgroud)

或者

Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23: 
  syntax error, unexpected ':'

      get 'detail', on: :member
Run Code Online (Sandbox Code Playgroud)

ruby jruby syntax-error

6
推荐指数
1
解决办法
3857
查看次数

如何检查是否已加载rails会话?

我想检查是否已加载rails会话.如果我跟踪会话,我得到这个:

Session: #<Rack::Session::Abstract::SessionHash:0x8e3e not yet loaded>
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-3

6
推荐指数
1
解决办法
1000
查看次数

SHIFT快捷方式显示为文化"nl-BE"的MAJ,它应该是SHIFT(C#.NET)

经过与Infragistics的长时间讨论后,看来带有SHIFT的ShortCuts在我的文化"nl-BE"中显示为MAJ.首先,文化"nl-BE"和AZERTY有点奇怪.如果想了解更多,请阅读http://en.wikipedia.org/wiki/AZERTY.重要的是:

其他键是相同的,即使传统上特殊键的名称用英语打印在它们上面.这是因为比利时主要是双语(法语 - 荷兰语)和官方三种语言(第三语言,德语,在东方语言中使用).

所以MAJ印刷为SHIFT.例如,在Office中,带有SHIFT的快捷方式显示为SHIFT.在Infragistics控件中,它们显示为MAJ.这让我们的客户感到沮丧.

因此,在与Infragistics讨论后,他们声称这是一个Windows Api调用,它返回MAJ而不是SHIFT.我从他们那里得到了一个展示行为的示例项目.所以现在我的问题是为什么Windows Api调用不会返回SHIFT,如果它是正常的,那么Office如何才能正确显示它?

获取密钥文本的代码是:

NativeWindowMethods.GetKeyNameText((int)scanCode, sb, 256);
Run Code Online (Sandbox Code Playgroud)

class NativeWindowMethods
{
    #region MapVirtualKey
    [DllImport("user32.dll")]
    internal static extern int MapVirtualKey(uint uCode, uint uMapType);
    #endregion //MapVirtualKey

    #region GetKeyNameText
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    internal static extern int GetKeyNameText(
        int lParam, 
        [MarshalAs(UnmanagedType.LPWStr), Out]System.Text.StringBuilder str, 
        int size);
    #endregion //GetKeyNameText
}
Run Code Online (Sandbox Code Playgroud)

如果是Shiftkey,则扫描码为2752512(2a),并返回MAJ.

那么,我的问题是什么?

  • 对于文化"nl-BE",MAJ是否正常归还?或者它是user32.dll中的错误?
  • 如果Office能够做到正确,那么Infragistics是否也能做到正确呢?
  • Infragistics是否使用正确的user32.dll api调用?

为了完整性,我将粘贴Utilities类的完整代码.从Form下一次调用完成:

systemLocalizedString = Utilities.GetLocalizedShortcutString(shortcut);

使用快捷键= ShiftF12.调用后,systemLocalizedString等于"MAJ + F12".

更新:在Hans Passant的帮助下,我下载了Microsoft Keyboard Layout Creator并导出了我当前的键盘布局.在.klc文件中没有找到MAJ,只有Shift(例如2a Shift).那么为什么user32.dll会返回MAJ?甚至更奇怪的是,当我复制.klc文件并将其安装为新键盘时,突然user32.dll确实为新安装的键盘返回Shift(虽然它是一个精确的副本).

Utilities.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using …
Run Code Online (Sandbox Code Playgroud)

c# culture infragistics localization user32

6
推荐指数
1
解决办法
791
查看次数

如何使用ant将文件从Unix共享复制到Windows机器?

我在Unix机器上有一些文件,我可以使用\ host \目录从Windows资源管理器访问Windows资源管理器

但是,当使用ant copy任务时,ant继续说该目录不存在...

所以,蚂蚁部分是:

<if>
    <available file="${unix-dbs-dir}" type="dir" />
    <then>
        <echo message="${unix-dbs-dir} exists"/>
    </then>
    <else>
        <echo message="${unix-dbs-dir} doesn't exist"/>
    </else>
</if>

<copy todir="${dbsDir}" verbose="true">
    <fileset dir="${unix-dbs-dir}">
        <include name="*.bd"/>
    </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

这个输出是:

15:28:42      [echo] \\hyperion\dbs doesn't exist
15:28:42 
15:28:42 BUILD FAILED
15:28:42 ... \\hyperion\dbs does not exist.
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用远程Windows网络路径,它确实有效......

知道如何解决这个问题吗?似乎很奇怪,我可以使用我的Windows资源管理器访问\ hyperion\dbs,但蚂蚁显然不能......

Unix是CentOs 6.5,但我想这没关系.

一些额外的信息.我创建了一个小的build.xml脚本,用于将文件从Unix机器复制到Windows机器.如果我从命令行执行build.xml ant脚本(顺便不以管理员身份启动),则输出为:

C:\Users\lievenc\TestCopyHyperion>%ANT_HOME%/bin/ant.bat -lib lib
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.
0_45\lib\tools.jar
Buildfile: C:\Users\lievenc\TestCopyHyperion\build.xml
     [echo] Load them from directory \\srv-linuxdev\pde\appl\samplenet\dbs
     [echo] \\srv-linuxdev\pde\appl\samplenet\dbs …
Run Code Online (Sandbox Code Playgroud)

unix ant ant-contrib jenkins

6
推荐指数
1
解决办法
202
查看次数

应用工作单元模式

我已经在企业应用程序架构的模式中读到,工作单元应该只在单个会话中使用.所以每个会议应该有唯一的工作单位.任何人都可以告诉我为什么我不能在整个应用程序中使用一个工作单元(在我的案例中是ASP.NET).

design-patterns unit-of-work poeaa

5
推荐指数
1
解决办法
2819
查看次数

Web开发.NET最佳实践

是否还有其他示例项目,如Northwind Starters工具包,它们在ASP.NET开发体系结构中显示了"最佳实践"(层,单元测试,模拟数据,o/r映射工具......)?

或链接到良好和清晰的资源或文档?(MSDN是一个很好的参考,但没有好的教程)

  • 有没有解决Visual Studio2008和/或AdventureWorks数据库的示例项目?

thx,Lieven Cardoen

asp.net

5
推荐指数
1
解决办法
2726
查看次数