小编Pet*_*eAC的帖子

在表达式树中检查了类型转换?

我正在使用Expression创建一些动态生成的代码.我的解决方案有效,除了一个功能:我想做一个检查类型转换,如果转换失败,则抛出TypeCastException.

我找到了Expression.TypeAs(),它执行类型转换,但是当转换失败时它返回null而不是throw.

有一种简单的方法可以在Expression中进行检查类型转换吗?或者我是否必须检查null并自己抛出异常?

这就是我所拥有的: -

ParameterExpression typedAttribute = Expression.Variable(attributeType, "typedAttribute");
ParameterExpression typedValue = Expression.Variable(valueType, "typedValue");

BlockExpression methodBlock = Expression.Block(new[] { typedAttribute, typedValue }, new Expression[]
   {
       Expression.Assign(typedAttribute, Expression.TypeAs(attribute, attributeType)),
       Expression.Assign(typedValue, Expression.TypeAs(value, valueType)),
       Expression.Call(visitor, methodInfo, typedAttribute, typedValue),
       Expression.Assign(visited, Expression.Constant(true)),
   });
Run Code Online (Sandbox Code Playgroud)

c# expression-trees

11
推荐指数
1
解决办法
2665
查看次数

现有的SOAP服务和新的Angular Web App

我们有一个已建立的WCF SOAP服务.它的接口在WSDL中定义,从中为我们的服务器生成C#类(客户使用相同的WSDL以各种语言生成客户端绑定).WSDL有一个当前版本,我们可以改变一点,旧版本,我们不能更改或删除没有弃用期,咨询等.SOAP请求往往很复杂,在同一请求中有多个XML命名空间.

WCF SOAP服务中有很多"智能",它提供了我们需要制作的新Web应用程序所需的各种提取和报告工具.我们希望将AngularJS用于客户端.但是这些复杂的SOAP请求在JavaScript世界中并不容易.如果我们只有REST服务,我们可以使用角度资源服务.如果不是这样,那么一个讲JSON的服务器,虽然是像SOAP这样的RPC样式,但运行时间相当接近.

关于如何减轻我们的服务器和客户端之间的阻抗不匹配,我有各种各样的想法.但没有什么听起来快速或容易.

我想到了: -

  1. 编写新的REST服务.正是客户方想要的东西,但是一个重要的新发展.
  2. WebHttpBinding看起来提供了一些东西.但在我看来它需要自定义属性的C#标记(当我们的C#从WSDL生成时如何实现)并且可能不支持我们的复杂类型
  3. 获取或编写客户端JS的负载以抽象出调用SOAP服务.但是,除非可以从WSDL自动生成,否则需要编写大量的客户端代码.
  4. 为服务器编写IDispatchMessageFormatter,以接受我发明的一些JSON格式的消息.听起来很难,特别是作为实现和集成IDispatchMessageFormatter的人的好例子似乎很难得到.
  5. 编写MessageEncoder以在JSON和XML之间进行交换.但这不是一个真正的编码操作,当我尝试写它时变得非常清楚!

我正在寻找建议.

wcf soap angularjs

9
推荐指数
1
解决办法
5751
查看次数

对于2D数组,Array.Copy()比for循环更快吗?

我最近改变了

        this.FieldValues = new object[2, fieldValues.GetUpperBound(1) + 1];
        for (int i = 0; i < FieldCount; i++)            
        {
            this.FieldValues[Current, i] = fieldValues[Current, i];
            this.FieldValues[Original, i] = fieldValues[Original, i];
        }
Run Code Online (Sandbox Code Playgroud)

        FieldValues = new object[2, fieldValues.GetLength(1)];
        Array.Copy(fieldValues, FieldValues, FieldValues.Length); 
Run Code Online (Sandbox Code Playgroud)

其中Current和Original的值分别为常数0和1.FieldValues是一个字段,fieldValues是一个参数.

在我使用它的地方,我发现Array.Copy()版本更快.但另一位开发人员表示,他在一个独立的程序中对Array.Copy()进行for循环计时,并发现for循环更快.

Array.Copy()可能不是真的更快吗?我认为它应该是超级优化的!

c# performance

6
推荐指数
2
解决办法
5632
查看次数

如何在AngularJS应用程序中执行计算密集型任务?

我正在使用JavaScript,HTML5和AngularJS编写应用程序.它只需要在最近的浏览器上工作(例如,IE10但不是IE9).

在应用程序的几个地方,将会有计算密集型任务,例如XML解析,base64解码; 这些可能涉及相当大的数据(几MB肯定是可能的).

如果我只是打电话之类的东西atob()或者DOMParser.parseFromString(),我会得到秒钟甚至几分钟无响应的浏览器.这显然是用户不能接受的.

我使用Angular的Q服务来实现异步访问外部Web服务,从而避免在等待响应时挂起浏览器.但是这样的操作已经有了异步API.

那些没有自己的异步API的计算关注任务怎么样?

我可以将这些任务中的一些分开,链接承诺.这有帮助吗?浏览器消息队列在每个任务结束时是否会自动旋转?

我看到"Web Workers"的存在,似乎提供了适当的多线程.但是它们似乎具有相当差的能力来向/从工作线程传输对象.当然,像我这样的人来自C#.Net似乎也是这样!例如,我想将Angular服务(内置和我自己的)注入到线程上的任务中.而且我也不想在线程之间复制大量数据.

其他人是否实现了包含严重计算的响应式客户端Web应用程序?如果是这样,他们用什么来实现这一目标?

javascript html5 angularjs

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

如何在JavaScript中创建XML命名空间节点?

我需要使用JavaScript创建一些XML.其中一个更困难的事情是我需要使用XML限定名称填充节点的文本内容.也就是说,本地名称和前缀,例如myns:myelement.

困难在于XML文档不包含前缀应绑定到的命名空间的任何其他元素或属性.所以我需要在封闭元素中添加一个名称空间节点(xmlns)来定义前缀.例如: -

<myElement xmlns:myprefix="http://something">myprefix:foo</myElement>
Run Code Online (Sandbox Code Playgroud)

我看不到在JavaScript中添加xmlns命名空间节点的好方法.目前,我有以下可怕的黑客: -

        // Hacky way to get a namespace prefix definition. TODO: can we do something nicer?
        var prefix = "ixe";
        requestElement.setAttributeNS(inputTypes[0].namespaceURL, prefix + ":" + "def", "");
        inputElement.textContent = prefix + ":" + inputTypes[0].localName;
Run Code Online (Sandbox Code Playgroud)

我正在使用所需的命名空间和任意前缀创建一个不需要的属性.这会导致生成的文档具有xmlns命名空间节点,以定义命名空间的前缀.

在最新的FireFox和Chrome上,但不是在IE上,可以做到inputElement.setAttribute("xmlns:" + PREFIX, inputType.namespaceUri);.但我想要一个与浏览器无关的解决方案.

但我宁愿不创建虚拟属性.当然,必须可以显式创建命名空间节点.我错过了什么?

javascript xml

5
推荐指数
0
解决办法
1243
查看次数

标签 统计

angularjs ×2

c# ×2

javascript ×2

expression-trees ×1

html5 ×1

performance ×1

soap ×1

wcf ×1

xml ×1