.NET 3.5,C#
我有一个带有"搜索"功能的网络应用程序.可搜索的一些字段是表中的第一类列,但其中一些实际上是XML数据类型中的嵌套字段.
以前,我构建了一个系统,用于为我的搜索动态构建SQL.我有一个很好的类层次结构,它构建了SQL表达式和条件语句.唯一的问题是SQL注入攻击不安全.
我正在阅读Rob Conery的优秀文章,该文章指出,如果永远不会枚举IQueryable结果,那么多个查询可以合并到服务器的单个TSQL查询中.这让我觉得我的动态搜索结构太复杂了 - 我只需要组合多个LINQ表达式.
例如(人为):
Author:
ID (int),
LastName (varchar(32)),
FirstName (varchar(32))
context.Author.Where(xx => xx.LastName == "Smith").Where(xx => xx.FirstName == "John")
Run Code Online (Sandbox Code Playgroud)
结果在以下查询中:
SELECT [t0].[ID], [t0].[LastName], [t0].[FirstName]
FROM [dbo].[Author] AS [t0]
WHERE ([t0].[LastName] = Smith) AND ([t0].[FirstName] = John)
Run Code Online (Sandbox Code Playgroud)
我意识到这可能是一个简单的动态查询生成的完美解决方案,可以安全地从SQL注入 - 我只是循环我的IQueryable结果并执行其他条件表达式来获得我的最终单执行表达式.
但是,我找不到对XML数据评估的任何支持.在TSQL中,为了从XML节点获取值,我们会做类似的事情
XMLField.value('(*:Root/*:CreatedAt)[1]', 'datetime') = getdate()
Run Code Online (Sandbox Code Playgroud)
但我找不到LINQ to SQL等同于创建此评估.有人存在吗?我知道我可以评估所有非XML条件的DB端,然后进行我的XML评估代码方面,但我的数据足够大,A)这是很多网络流量拖累性能和B)我会退出 - 如果我无法评估XML第一个DB端以排除某些结果集,则会出现内存异常.
想法?建议?
奖金问题 - 如果XML评估实际上是可能的DB方面,那么FLWOR支持呢?
我有一个由其他人写的相当复杂的装饰器.我想要做的是根据一个descision调用一次函数的装饰版本,或者另一次调用原始函数(未装饰).这可能吗?
我刚刚开始使用IoC容器,如果这是一个愚蠢的问题,请道歉.
我在应用程序中有如下代码
internal static class StaticDataHandlerFactory
{
public static IStaticDataHandler CreateHandler(StaticDataUpdate staticDataUpdate)
{
if (staticDataUpdate.Item is StaticDataUpdateOffice)
{
return new OfficeUpdateHandler();
}
if (staticDataUpdate.Item is StaticDataUpdateEmployee)
{
return new EmployeeUpdateHandler();
}
if (staticDataUpdate.Item == null)
{
throw new NotImplementedException(
string.Format("No static data provided"));
}
else
{
throw new NotImplementedException(
string.Format("Unimplemented static data type of {0}", staticDataUpdate.Item.GetType().FullName));
}
}
}
Run Code Online (Sandbox Code Playgroud)
它基本上是一个简单的工厂,它返回处理输入数据的正确策略.
IoC容器是否允许我删除这样的代码?也就是说:它是否允许我根据输入参数的类型动态选择要加载的具体实现?
还是我离开这里?
是否有任何软件可以帮助学习/理解/试验和谐与对立的规则?
我已经看到了与源控制相关的"尖峰"这个词.
例如,我正在使用的项目有三个顶级文件夹:trunk,branches和spikes.
这个词的含义是什么?
是否可以在客户端检测用户是否使用加密页面?
换句话说 - 我想知道当前页面的URL是以http还是https开头.
我正在开发一个与第三方集成的 SOAP 应用程序。我觉得这个第三方的WSDL很奇怪。我对 SOAP 还很陌生,所以如果它没有损坏,我不想要求他们修复它。以下是我注意到的一些我认为错误的事情,尽管我确信它在技术上是有效的文档(因此我在标题中写了“最佳实践”)。另外,我使用 gSOAP 作为我的 SOAP 库,这可能就是为什么我认为其中一些事情很奇怪(我对 gSOAP 的了解甚至比对一般 SOAP 的了解还要新)。
它们在同一 WSDL 中具有为 SOAP 1.1 和 SOAP 1.2 指定的接口。这导致 gSOAP 生成所需数量的两倍,因为我只使用 1.2。
他们所有的命名空间都是http://tempuri.org. 不应该是这样的,对吧?
尽管定义了一堆 RPC 调用,但它们的 WSDL 使用文档格式。我正在考虑要求他们切换到 RPC 格式,因为 gSOAP 似乎不会生成采用 C++ 类型参数作为文档格式的方法。相反,它为每个 API 函数的输入和响应数据创建一个新类。如果我无法解决这个问题,我将不得不编写另一层包裹 gSOAP 的内容,以便为我的应用程序的其余部分提供合理的 API。另外,AFAICT,如果他们切换到 RPC,那么来回的 XML 将与现在完全相同,所以我认为这不会很困难。
元素的 minOccurs = 0 但当我提交没有它们的请求时,我会收到返回的错误,表明它们是必需的(有时甚至是空指针异常的堆栈跟踪)。如果需要的话,他们应该将它们指定为 minOccurs = 1,对吧?
几乎所有 Web 服务函数都指定一个响应,其中包含一个表示成功的整数(实际上是一个布尔值)和一个错误消息字符串。他们应该为此使用 SOAP 错误吗?我认为如果这是一个错误,我的应用程序会更容易处理,因为 gSOAP 可以让我很容易地弄清楚这一点(并简单地打印错误消息)。
当然,我并不对这家第 3 方公司仅仅因为我要求他们改变他们的 WSDL 就抱有很高的希望。至少我会学到一些东西……据我所知,这些都没有错,甚至没有问题。感谢您的帮助。
我有一个.net事务与SQL插入到SQL Server 2005数据库.该表具有标识主键.
当事务中发生错误时,将Rollback()被调用.行插入正确回滚,但是下次将数据插入表时,标识会增加,就好像回滚从未发生过一样.所以基本上在身份序列中存在差距.有没有办法让Rollback()方法回收丢失的身份?
我没有以正确的方式接近这个吗?
我知道is和asfor instanceof,但是反射isInstance()方法怎么样?
c# ×2
http ×2
sql ×2
.net ×1
.net-3.5 ×1
ajax ×1
cvs ×1
decorator ×1
factory ×1
gsoap ×1
https ×1
instanceof ×1
javascript ×1
linq-to-sql ×1
open-source ×1
python ×1
reflection ×1
soap ×1
terminology ×1
transactions ×1
wsdl ×1
xml ×1