我们使用TFS 2013作为构建服务器.我已经开始了一个C#6.0项目,我正在努力建立它.我正在使用新的null条件运算符和我的构建chokes.我已经尝试在TFS服务器上安装了几个东西,包括目标包和VS 2015.我已经尝试将/tv:14.0提供给MSBuild参数.
Configuration\EntityEntityConfig.cs(270):无效的表达式术语'.'
Configuration\EntityEntityConfig.cs(283):无效的表达式术语'.'
Configuration\EntityEntityConfig.cs(283):语法错误,':'预期
......等
在这一点上,我不知道还有什么可以尝试.任何建议将不胜感激.
我正在使用SSMS 2012并尝试连接到Orchard创建的SDF.根据这个答案,我应该能够在连接我的对象浏览器时选择SQL Server Compact Edition作为服务器类型,但这不是一个选项.我需要安装什么吗?我最初是否错过了部分安装(设置SSMS时)?
我试图找出如何使内可用集群性能监控和我找不到似乎发现了什么,而搜索不是如何访问性能计数器等为集群.
情况是这样的:到目前为止,我们已经在单个服务器上设置了MSMQ,并且我们已经访问了队列计数(用于健康检查),如下所示:
ManagementScope scope = new ManagementScope(@"\\MachineName\root\CIMv2");
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_PerfFormattedData_msmq_MSMQQueue WHERE Name = 'MachineName\private$\QueueName'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ulong? count = (from ManagementObject queue in searcher.Get()
select (ulong?)queue.GetPropertyValue("MessagesInQueue")).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试通过MSMQ集群的客户端访问点名称(代替MachineName)执行相同操作时,我得到了System.Management.ManagementException: Invalid Class,据我所知,这表明性能计数器不可用.这是有道理的,因为我们没有做任何特别的事情来使它们在集群上可用,因为我们不知道如何.
所以,任何方向都将非常感激.几周以来,我一直在为此而奋斗.
编辑:好的,我们已经多了一点,如果我们直接进入集群,表/类存在,但表中没有任何行.
找到NetNameForPerfCounters注册表项,但它看起来不适合我们的情况,因为我们只在主动节点上运行一个MSMQ实例,并且所涉及的所有服务器都是Windows Server 2008(我认为是R2).
我愿意让他们放入NetNameForPerfCounters reg键,但我找不到资源来告诉我它的去向.它是否进入客户端访问点的注册表(因为您可以将regedit连接到客户端访问点)?它是否会进入集群?在个别机器上?在客户端机器上?(猜猜我们可以把它放在任何地方只是为了测试它.)
EDIT2:我们尝试了NetNameForPerfCounters,它没有用.我们实际上有一个团队在微软复制我们的问题,所以我们已经开了一个重要的支持案例,它应该作为一个bug去产品团队.当我收到回复时会发布结果.
我不知道这个问题是否适合这个问题,所以如果不是,请随意移动.
在Visual Studio 2015中,行号似乎有六个字符空格,即使您的文件只有30行 - 因此这样可以减少屏幕上实际代码的字符数.有没有办法去除额外的空间?
我正在实现IErrorHandler,以便在一个地方集中我的WCF服务的所有错误处理.这很好用:
public class ServiceErrorHandler : IErrorHandler
{
public bool HandleError(Exception error)
{
// ..Log..
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
// ..Provide fault..
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我们使用Ninject在服务的其余部分注入依赖项,我想在这里做同样的事情.由于WCF正在根据我的配置构建对象,并且我认为我没有任何钩子进入此过程,我需要使用属性注入:
[Inject]
public ILoggingService Logger { get; set; }
Run Code Online (Sandbox Code Playgroud)
然而,这似乎永远不会被注入.我尝试使用Ninject的MVC扩展来设置ServiceErrorHandler允许像过滤器一样注入,但这似乎没有成功.有没有办法让这种情况发生?
情况简要概述:
我有一个服务,它接收信息并通过套接字发送回复.连接是不安全的.我想设置另一个可以为这些连接提供TLS的服务 - 这个新服务将提供单个端口并根据提供的客户端证书分发连接.我不想使用stunnel有几个原因,一个是每个接收端口需要一个转发端口.
我目前正在尝试实施的解决方案:
本质上,我正在尝试将SslStream(传入)与NetworkStream耦合(传出 - 可能是一个Socket,但我将其放入NetworkStream以匹配传入)并且将读取/写入操作链接到两者.此链接将提供客户端(通过SSL/TLS)和服务(通过不安全的连接)之间的流程.
这是我想出的链接这些Streams的类:
public class StreamConnector
{
public StreamConnector(Stream s1, Stream s2)
{
StreamConnectorState state1 = new StreamConnectorState(s1, s2);
StreamConnectorState state2 = new StreamConnectorState(s2, s1);
s1.BeginRead(state1.Buffer, 0, state1.Buffer.Length, new AsyncCallback(ReadCallback), state1);
s2.BeginRead(state2.Buffer, 0, state2.Buffer.Length, new AsyncCallback(ReadCallback), state2);
}
private void ReadCallback(IAsyncResult result)
{
// Get state object.
StreamConnectorState state = (StreamConnectorState)result.AsyncState;
// Finish reading data.
int length = state.InStream.EndRead(result);
// Write data.
state.OutStream.Write(state.Buffer, 0, length);
// Wait for new data.
state.InStream.BeginRead(state.Buffer, 0, state.Buffer.Length, new …Run Code Online (Sandbox Code Playgroud) 我正在阅读SynchronizationContext并尝试确保OperationContext即使在await通话之后我试图将所有线程都流入所有线程也不会弄乱任何东西.
我有这SynchronizationContext门课:
public class OperationContextSynchronizationContext : SynchronizationContext
{
// Track the context to make sure that it flows through to the next thread.
private readonly OperationContext _context;
public OperationContextSynchronizationContext(OperationContext context)
{
_context = context;
}
public override void Post(SendOrPostCallback d, object state)
{
OperationContext.Current = _context;
d(state);
}
}
Run Code Online (Sandbox Code Playgroud)
然后围绕每个方法调用(使用a Ninject IInterceptor)调用它:
var original = SynchronizationContext.Current;
try
{
// Make sure that the OperationContext flows across to the other threads,
// …Run Code Online (Sandbox Code Playgroud) 我们有一个过去工作的设置,并在过去几个月的某个时间停止了.我们使用在config中指定的自定义死信队列,但基本上设置如下::
MsmqIntegrationBinding msmq = new MsmqIntegrationBinding(
// Defaults to WindowsDomain. We want all messages to be authenticated.
MsmqIntegrationSecurityMode.Transport);
msmq.DeadLetterQueue = DeadLetterQueue.Custom;
msmq.CustomDeadLetterQueue = new Uri("net.msmq://localhost/private/BulkUpdatesDeadLetter");
Run Code Online (Sandbox Code Playgroud)
我们已经开始收到此错误,这似乎很清楚:
System.InvalidOperationException:绑定和MSMQ配置之间发生不匹配.无法发送消息.绑定中指定的自定义死信队列必须是事务性队列.确保自定义死信队列地址正确且队列是事务性队列.
我们已经验证了我们指向配置中的正确队列并且队列是事务性的.是否有任何其他问题可能会导致抛出此异常,或者我们是否只是遗漏了明显的内容?
更新:我们的Web操作团队是否删除并重新创建队列并仍然收到错误.
我们将ADFS用于内部应用程序 - 用户在访问我们的应用程序时,基本上都可以透明地登录.但是,如果用户将页面打开超过一个小时然后尝试在该页面上执行某些操作(除了导航到另一个页面),则会出现错误:
此页面正在访问不受其控制的信息.这带来了安全风险.你想继续吗?
看起来该页面正在尝试将该请求重定向到ADFS服务器,并且浏览器正在阻止该请求.
我的问题是:我如何捕获这种情况并让用户到ADFS服务器重新进行身份验证?
我没有幸运在谷歌上发现任何关于此的事情.
参考决议
(TODO:解释Orchard如何通过查看csproj文件的"引用"部分以及查看每个模块"bin"目录中删除的其他程序集二进制文件来确定引用)
不幸的是,这正是我需要的信息.我创建了一个自定义模块,它引用了一个自定义的内部DLL.当我尝试使用此DLL中的类时,我得到以下异常:
无法从程序集'Custom,Version = [version],Culture = [culture],PublicKeyToken = [token]'加载类型'Custom.MyClass'.
因此,我的问题是:Orchard对模块引用做了什么,是否有什么特别的东西让Orchard拿起模块的引用?
编辑:看起来可以在这篇博客文章及其评论中找到更好的信息.但是,我的自定义程序集已经存在src\Orchard.Web\App_Data\Dependencies,我仍然收到错误.
EDIT2:我们在lib文件夹中有一个自定义DLL的副本,所以我尝试引用那个(因为我们有另一个成功完成的模块),但仍然没有变化.
EDIT3 ::参考前两个编辑,它不是从lib文件夹复制到App_Data\Dependencies文件夹.我刚刚在lib文件夹中添加了一个新的DLL 并引用它,它没有出现在该Dependencies文件夹中.我认为当前Custom.dll并没有取代那里的那个,这就是我收到错误的原因.但是为什么Orchard没有复制到Dependencies文件夹中?