Tag: C#的

Catch-22防止通过WIF保证stream式TCP WCF服务的安全 毁了我的圣诞节,心理健康

我需要使用WIF保护stream式WCF net.tcp服务端点 。 它应该authentication来自我们的令牌服务器的来电。 该服务是stream式传输,因为它旨在传输大量数据。 这似乎是不可能的。 如果我无法绕过捕捉,我的圣诞节将被毁坏,我会喝水自己死在一个天沟,而快乐的购物者走过我慢慢冷却的身体。 大家好,你们。 为什么这是不可能的? 这是Catch-22。 在客户端上,我需要使用从令牌服务器获得的GenericXmlSecurityToken创build一个通道。 没问题。 // people around here hate the Framework Design Guidelines. var token = Authentication.Current._Token; var service = base.ChannelFactory.CreateChannelWithIssuedToken(token); return service.Derp(); 我说“没问题”吗? Problemo。 实际上, NullReferenceException样式问题。 “兄弟,”我问框架,“你甚至无效检查? 该框架是沉默的,所以我拆解,发现 ((IChannel)(object)tChannel). GetProperty<ChannelParameterCollection>(). Add(federatedClientCredentialsParameter); 是exception的来源,并且GetProperty调用返回null 。 那么,WTF? 原来,如果我打开消息安全性并将客户端凭证types设置为IssuedToken则此属性现在存在于ClientFactory (protip:在IChannel中没有“SetProperty”等价物,这个混蛋)。 <binding name="OMGWTFLOL22" transferMode="Streamed" > <security mode="Message"> <message clientCredentialType="IssuedToken"/> </security> </binding> […]

如何将TimeSpan序列化为XML

我想序列化一个.NET TimeSpan对象到XML,它不工作。 一个快速的谷歌已经build议,虽然TimeSpan是可序列化的,但XmlCustomFormatter不提供将TimeSpan对象与XML进行转换的方法。 一个build议的方法是忽略TimeSpan进行序列化,而是序列化TimeSpan.Ticks的结果(并使用new TimeSpan(ticks)进行反序列化)。 下面是一个例子: [Serializable] public class MyClass { // Local Variable private TimeSpan m_TimeSinceLastEvent; // Public Property – XmlIgnore as it doesn't serialize anyway [XmlIgnore] public TimeSpan TimeSinceLastEvent { get { return m_TimeSinceLastEvent; } set { m_TimeSinceLastEvent = value; } } // Pretend property for serialization [XmlElement("TimeSinceLastEvent")] public long TimeSinceLastEventTicks { get […]

为什么没有ICloneable <T>?

为什么一个通用的ICloneable<T>不存在的特定原因? 如果我不需要每次克隆一些东西,就可以更舒服一些。

C ++比C#快多less?

还是现在呢? 据我所知,有一些C#certificate比C ++更快的领域,但是我从来没有胆量去亲自testing。 以为你们中的任何一个都可以详细解释这些差异,或者指出我对这方面信息的正确位置。

.Net中的优先队列

我正在寻找一个优先级队列或堆数据结构的.NET实现 优先级队列是比简单sorting更灵活的数据结构,因为它们允许新元素以任意间隔进入系统。 将新工作插入优先级队列要比在每次到达时重新sorting所有内容要便宜得多。 基本优先级队列支持三个主要操作: 插入(Q,X)。 给定一个具有密钥k的项目x,将其插入优先级队列Q. 查找-最小(Q)。 返回指向其优先级队列Q中的键值小于其他键的项的指针。 删除 – 最小(Q)。 从优先级队列Q中删除其项最小的项 除非我看错了地方,否则框架中没有一个。 有人知道一个好的,还是应该滚我自己的?

页面与WPF中的窗口?

在解决scheme资源pipe理器中添加新文件时,WPF中的页面和窗口之间有什么区别?

在STL地图中,使用map :: insert比更好吗?

前一段时间,我和一位同事讨论了如何在STL 地图中插入值。 我更喜欢map[key] = value; 因为它感觉自然,而且读起来很清楚,而他更喜欢map.insert(std::make_pair(key, value)) 我只是问他,我们都不记得插入效果更好的原因,但我相信这不仅仅是一种风格偏好,而是有效率等技术原因。 SGI STL参考文件只是简单地说:“严格地说,这个成员函数是不必要的:它只是为了方便而存在的。” 有谁能告诉我这个理由,还是我梦想有一个?

为什么C ++ STL如此大量地基于模板? (而不是*接口*)

我的意思是,除了它的义务名称(标准模板库)… C ++最初是想将OOP概念提供给C语言。那就是:你可以根据类和类的层次结构来说明一个特定的实体可以做什么(不pipe它是怎么做的)。 由于多重inheritance的问题,一些能力组合更难以描述,而且C ++支持接口的概念有点笨拙(与java等相比),但它在那里(可能是改善)。 然后模板和STL一起发挥作用。 STL似乎采用了传统的OOP概念,并使用模板来代替它们。 应该区分使用模板来概括types的情况,其中types本身与模板的操作无关(例如容器)。 有一个vector<int>是非常有意义的。 然而,在许多其他情况下(迭代器和algorithm),模板化types应该遵循一个“概念”(Input Iterator,Forward Iterator等),其中概念的实际细节完全由模板的实现来定义函数/类,而不是与模板一起使用的类,这是OOP的一些反用法。 例如,你可以告诉这个函数: void MyFunc(ForwardIterator<…> *I); 更新:由于在原来的问题中还不清楚,ForwardIterator可以自行模板化,以允许任何ForwardIteratortypes。 相反,将ForwardIterator作为一个概念。 希望只有通过查看其定义才能获得Forward Iterator,在此您需要查看以下实现或文档: template <typename Type> void MyFunc(Type *I); 我可以赞成使用模板的两个说法:通过为每个使用的types定制编译模板,而不是使用vtables,可以使编译代码更高效。 事实上,模板可以用于本机types。 然而,我正在寻找更为深刻的理由,为什么放弃古典OOP而赞成STL的模板化? (假设你读了那么多:P)

C#5asynchronousCTP:为什么在EndAwait调用之前生成的代码中内部“状态”设置为0?

昨天,我正在谈论新的C#“asynchronous”function,特别是探究生成的代码的样子,以及the GetAwaiter() / BeginAwait() / EndAwait()调用。 我们在C#编译器生成的状态机上查看了一些细节,有两个方面我们不明白: 为什么生成的类包含一个Dispose()方法和一个$__disposingvariables,它们似乎永远不会被使用(并且该类不会实现IDisposable )。 为什么在调用EndAwait()之前,内部statevariables设置为0,通常0表示“这是初始入口点”。 我怀疑第一点可以通过在asynchronous方法中做一些更有趣的事情来回答,虽然如果有人有任何进一步的信息,我会很高兴听到它。 然而,这个问题更多的是关于第二点。 这是一个非常简单的示例代码: using System.Threading.Tasks; class Test { static async Task<int> Sum(Task<int> t1, Task<int> t2) { return await t1 + await t2; } } …这是为实现状态机的MoveNext()方法生成的代码。 这是从reflection器直接复制 – 我还没有解决难以形容的variables名称: public void MoveNext() { try { this.$__doFinallyBodies = true; switch (this.<>1__state) { case 1: break; case 2: […]

为什么通过一个string往返转换不安全的双?

最近我不得不把序列化成文本,然后把它取回来。 价值似乎不是等值的: double d1 = 0.84551240822557006; string s = d1.ToString("R"); double d2 = double.Parse(s); bool s1 = d1 == d2; // -> s1 is False 但根据MSDN:标准数字格式string ,“R”选项应该保证往返安全。 往返(“R”)格式说明符用于确保转换为string的数值将被parsing回相同的数值 为什么会发生?