一,代码:
<UserControl x:Class="Engage.IWS.Modules.InteractionResults.Views.InteractionResultView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"
... more here that should be irrelevant ...
<TreeView
x:Name="lstResults"
Grid.Row="1"
ItemsSource="{Binding Children}"
>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding Children}"
DataType="{x:Type Models:InteractionResult}"
>
<StackPanel Orientation="Horizontal">
<TextBlock
Text="{Binding Name}"
/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<cmd:EventToCommand Command="{Binding ResultSelected, Mode=OneWay}"
CommandParameter="{Binding ElementName=lstResults, Path=SelectedValue}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
我正在使用MvvmLight,我想在ViewModel上使用TreeView中当前选定的项目调用Command.这一切都正常,直到我尝试添加EventToCommand行为.
删除块中的所有内容(包括<i:Interaction.Triggers>块)可防止发生NullReferenceException,但是在选择项目时我没有任何行为.
为清楚起见,该错误表现为XamlParseException,它包含一个TargetInvocationException,其中包含NullReferenceException.这是我第一次尝试使用EventToCommand.
此异常的可能原因是什么,我该如何解决?
NullReferenceException堆栈跟踪是:
at System.Windows.Markup.ReflectionHelper.IsPublicType(Type type)
at System.Windows.Markup.XamlTypeMapper.UpdateAttachedPropertyMethdodInfo(BamlAttributeInfoRecord attributeInfo, Boolean isSetter)
at System.Windows.Markup.XamlTypeMapper.UpdateAttachedPropertyGetter(BamlAttributeInfoRecord attributeInfo)
at System.Windows.Markup.PropertyDefinition.get_AttachedPropertyGetter()
at System.Windows.Markup.BamlCollectionHolder.InitDefaultValue()
at System.Windows.Markup.BamlCollectionHolder..ctor(BamlRecordReader reader, Object parent, Int16 …Run Code Online (Sandbox Code Playgroud) 我们有一个供应商应用程序,我们通过ClickOnce扩展和部署.供应商还提供"部署管理器",将应用程序和任何扩展打包到我们发布到Web服务器的ClickOnce部署中.我提到这个细节,以便我们对改变部署过程没有很好的控制.
因此,我们将应用程序发布到我们的Web服务器.这工作正常,更新工作正常.加载应用程序时,它将提示用户是否要更新应用程序.
我们的一些客户要求提供"MSI安装程序".他们的用户会经常切换桌面,这需要他们重新下载应用程序,因为它被保存到本地用户文件夹而不是漫游配置文件.
对我们来说,尽快更新更新是非常重要的.因此,要求客户端以MSI形式下载最新更新并使用组策略进行部署是不可能的.
因此,作为妥协,我们希望能够提供可以通过组策略发布的初始安装,但要求通过Web进行应用程序的更新.
这是可能的,我怎样才能做到这一点?
我在MSDN上的问题有一个粗略的答案,但没有很好的描述如何实现它.
我需要压缩哪些文件/目录来构建初始脱机安装程序?我们的部署已经在Web服务器上安装了多个版本.
部署后如何操作"更新URL"?
我们目前正在设计一个web api,并且正在实施授权.我们已经(主要)跟随亚马逊的实施,但有一部分我真的不完全理解.
也就是说,base64对生成的hmac进行编码有什么意义?至少对于大多数站点来说,长度的差异可以忽略不计.亚马逊可能会注意到这种差异.这是唯一的原因吗?它可能与ascii/unicode有关吗?
我正在尝试用uwsgi部署django,我认为我不了解它是如何工作的.我有uwsgi在皇帝模式下运行,我正试图让他们的自己的virtualenvs运行vassals与不同的python版本.
皇帝配置:
[uwsgi]
socket = /run/uwsgi/uwsgi.socket
pidfile = /run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi.d
emperor-tyrant = true
master = true
autoload = true
log-date = true
logto = /var/log/uwsgi/uwsgi-emperor.log
Run Code Online (Sandbox Code Playgroud)
和附庸:
uid=django
gid=django
virtualenv=/home/django/sites/mysite/venv/bin
chdir=/home/django/sites/mysite/site
module=mysite.uwsgi:application
socket=/tmp/uwsgi_mysite.sock
master=True
Run Code Online (Sandbox Code Playgroud)
我在emperor日志中看到以下错误:
Traceback (most recent call last):
File "./mysite/uwsgi.py", line 11, in <module>
import site
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)
我的网站的virtualenv创建为python 3.4 pyvenv.uwsgi是系统uwsgi(python2.6).我的印象是,皇帝可能是任何python版本,因为附庸将使用自己的python和环境启动,由主进程启动.我现在认为这是错误的.
我想要做的是使用系统python运行uwsgi主进程,但使用自己的python和自己的库运行各种vassal(应用程序).这可能吗?或者,如果我想运行多个蟒蛇,我将不得不运行多个皇帝?有点打败虚拟环境的目的.
我只是将我们的开发Django站点设置为使用redis作为缓存后端,它一切正常.我把Redis搞砸了,看看会发生什么,而且由于缓存后端行为,确实有足够的Django 404.连接被拒绝或其他各种错误.
有没有办法指示Django忽略Cache错误,并继续正常处理?缓存是一种性能优化似乎很奇怪,但如果失败则会导致整个站点崩溃.
我试着在后端写一个包装器,如下所示:
class CacheClass(redis_backend.CacheClass):
""" Wraps the desired Cache, and falls back to global_settings default on init failure """
def __init__(self, server, params):
try:
super(CacheClass, self).__init__(server, params)
except Exception:
from django.core import cache as _
_.cache = _.get_cache('locmem://')
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为我试图在设置缓存类型的调用中设置缓存类型.这一切都非常混乱.
那么,有没有简单的方法来吞下缓存错误?或者在失败时设置默认缓存后端?
我在工作中遇到了一个相当尴尬的困境.我们需要在4个或5个不同的服务中创建用户,并以这样的方式进行设置:如果一个失败,它们都会失败.它们封装在事务范围块中.
我们需要添加用户的服务之一需要telnet,并捏造一些数据.还有其他方法可以做到这一点(这需要花钱)但是现在这就是我们所坚持的.添加一个用户大约需要3分钟.我们将努力将这一点大幅度降低,这可以想象,但这不是重点.这个调用是异步的,必须要正常工作.一句话是,该服务最多只能有10个连接.
我们的项目正在设置为批量创建用户.因此,一次可能创建50个用户.当只能通过telnet建立10个连接时,这会产生一个问题,并且处理过的用户除了telnet服务之外不可能花费很长时间.我现在需要同步这个过程,所以其余的都不能继续,直到它完成.
我们正在使用带有异步调用的回调和委托来实现该功能.什么是封装异步部分的最佳方法,并且在完成之前不会继续?
我们应该设置一个仅在呼叫结束时终止的循环吗?线程库中有什么东西可以帮助吗?我之前从未使用过线程,所以这对我来说是第一次.有什么工具可以帮助解决这个问题?
编辑:
如果我使用BeginInvoke/EndInvoke模式,那么第一个委托中的异步调用是否也会使开头/结尾?
例:
public void dele1(string message) {
Console.Write(message);
delegate2 del2 = new delegate2;
del2();
Console.Write("End of Delegate 2");
}
public void dele2() {
// Long Processing
Console.Write("Delegate 2");
}
public delegate void delegate1(String message);
public delegate void delegate2();
delegate1 del1 = new delegate1(dele1);
del1("Delegate 1").BeginInvoke;
del1().EndInvoke;
Console.Write("End of Delegate 1");
Run Code Online (Sandbox Code Playgroud)
//预期输出(结束调用等待代理2完成):
Delegate 1
End of Delegate 2
Delegate 2
End of Delegate 1
Run Code Online (Sandbox Code Playgroud)
//或(结束调用仅等待委托1完成但不是任何内部委托调用):
Delegate 1
End of Delegate 2
End of Delegate 1 …Run Code Online (Sandbox Code Playgroud) 我遇到了Windows窗体中DateTimePicker控件的一个非常具体的错误.该控件具有自定义格式(MM-YYYY - > 01/2010) - 信用卡的月份/年份.今天是9月29日.如果用户选择该控件,并使用键盘将月份设置为2月,则控件将抛出ArgumentOutOfRangeException.没有2009年2月29日这样的日期.这也将发生在第31天,只有30天的一个月.
通过将日期设置为"01"来处理此问题很容易,但是用户可以单击日历以手动选择30日,然后使用键盘选择2月.
当输入发生在GUI而非真正的代码中时,如何捕获此异常?我们试图在TextChanged事件中捕获它,但这已经太晚了.异常已经抛出.
有办法处理这个案子吗?如果控件自动将当天更改为该月的最高值,那将是很好的.或者至少它是否通过事件传递了异常.
(我知道我们可以捕获KeyPressed事件,并且每次将日期设置为01,但这感觉很'hacky').
我们构建了一个小组件,它接受一个Id,在数据库中查找一个程序集/命名空间/类的条目,并动态加载我们所追求的类的实例.到目前为止它一直很好用,但是当在VS 2010中运行此代码时,它失败了.
Private Function AssemblyLoaded(ByVal assemblyFile As String) As Assembly
Dim assemblies() As Assembly = AppDomain.CurrentDomain.GetAssemblies
For Each asmb As Assembly In assemblies
If (asmb.Location = assemblyFile)) Then Return asmb
Next
Return Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
第一个问题是,当迭代器命中动态程序集时,没有asmb.Location,并抛出NotSupportedException.有没有办法检查位置字段的Unsupported-ness而不必捕获异常?
第二个问题,asmb.Location返回整个路径而不仅仅是文件名,这意味着这个函数每次都会失败.如果此函数确定某个类尚未加载,那么我们尝试加载它并获取AccessViolationException,因为该类已经加载,我们无法"重新加载"它.
将功能更改为此工作:
Private Function AssemblyLoaded(ByVal assemblyFile As String) As Assembly
Dim assemblies() As Assembly = AppDomain.CurrentDomain.GetAssemblies
For Each asmb As Assembly In assemblies
Try
If (asmb.Location.EndsWith(assemblyFile)) Then Return asmb
Catch ex As NotSupportedException
Continue For
End Try
Next
Return Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
但它感觉很脏.有没有更好的方法来检查程序集是否已经加载,并将其交给调用者?以上问题是否特定于.NET 4.0或Visual …
在使用Apache2的Linux服务器上运行Django 1.2.5,由于某种原因,Django似乎无法存储CSRF或Session cookie.因此,当我尝试登录Django管理员时,它在提交登录表单时给出了CSRF验证错误.有没有人反对这个并找到了解决方案?
当我在我的主机提供的VPS的网址上尝试这个时,我能够发一个有效的帖子.示例:vps123.hostdomain.com/admin/,并为该域设置cookie.但是,当我访问www.sitedomain.com/admin/并尝试登录时,我收到CSRF 403错误,指出cookie不存在,当我检查我的浏览器cookie时,它们没有设置.
我尝试在设置文件中设置以下内容:
SESSION_COOKIE_DOMAIN = 'www.sitedomain.com'
CSRF_COOKIE_DOMAIN = 'www.sitedomain.com'
Run Code Online (Sandbox Code Playgroud)
还尝试过:
SESSION_COOKIE_DOMAIN = 'vps123.hostdomain.com'
CSRF_COOKIE_DOMAIN = 'vps123.hostdomain.com'
Run Code Online (Sandbox Code Playgroud)
我在settings.py中将"django.middleware.csrf.CsrfViewMiddleware"添加到我的MIDDLEWARE_CLASSES中,表单中有一个CSRF令牌,它显示在POST中.
我启用了cookie.我在多个浏览器和机器上试过这个.
在www.sitedomain.com前面有一个清漆代理服务器,我认为可能是问题的一部分.任何有使用代理服务器和Django经验的人都可以对此有所了解.
我的apache2配置:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.sitedomain.com
ServerAlias www.sitedomain.com
<Location "/">
Options FollowSymLinks
SetHandler python-program
PythonInterpreter nzsite
PythonHandler django.core.handlers.modpython
PythonDebug On
PythonPath "['/var/www/django_projects', '/var/www', '/usr/lib/python2.6/dist-packages'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE project_one.settings
</Location>
<location "/phpmyadmin">
SetHandler None
</location>
</VirtualHost>
<VirtualHost *:80>
ServerName othersite.sitedomain.com
ServerAlias othersite.sitedomain.com
<Location "/">
Options FollowSymLinks
SetHandler python-program
PythonInterpreter ausite
PythonHandler django.core.handlers.modpython
PythonDebug On
PythonPath "['/var/www/django_projects', '/var/www', …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Function.apply来调用具有动态数量的参数的函数,但是我无法访问原始上下文,并且不希望自己设置上下文.我想要的是能够调用具有可变数量的参数的函数,保持原始上下文.
也许一些代码应该告诉你我正在尝试做什么:
function MulticastDelegate() {
var handlers = [];
this.event = {
subscribe: function(handler) {
if (typeof(handler) === 'function') {
handlers.push(handler);
}
},
unsubscribe: function(handler) {
if (typeof(handler) === 'function') {
handlers.splice(handlers.indexOf(handler),1);
}
}
}
this.execute = function() {
var args = Array.prototype.slice.call(arguments);
for (var handler in handlers) {
// call this with the original context of the handler
handlers[handler].apply(null, args);
}
}
}
Run Code Online (Sandbox Code Playgroud)
本质上,我想要的行为apply- 能够传递一个参数数组 - 没有行为call- 改变函数执行的上下文.
.net ×2
c# ×2
django ×2
python ×2
.net-4.0 ×1
api ×1
asynchronous ×1
caching ×1
clickonce ×1
csrf ×1
delegates ×1
deployment ×1
exception ×1
javascript ×1
mvvm ×1
mvvm-light ×1
python-3.x ×1
reflection ×1
security ×1
treeview ×1
uwsgi ×1
varnish ×1
vb.net ×1
virtualenv ×1
winforms ×1
wpf ×1