问题的背景.
编辑3 我可以验证这似乎在Chrome 20中再次运行.谢谢!
TLDR更新
编辑2 进一步捣乱后,这似乎是Chrome 19中的一个错误.请看这里:
没有什么比最新的bug了!:-)
Firefox-latest和IE8/9按预期工作.Fiddler日志显示相同的行为,主要区别在于第二次401授权检查不会发送表格有效负载乱码并且它按预期工作.
这听起来像一个测试用例,修复工作正在进行中!所以,希望对于那些可能遇到过这种情况的人来说,这会有所帮助!
结束TLDR
我有一个控制器操作,只接受一个上传的文件,这是一个"事件"的CSV文件.在幕后,此CSV被解析出来,变成了事件对象,数据在数据库中同步.结果输出时,系统会提示用户下载Excel电子表格,其中包含发生的每一行的所有错误.
这在我的开发机器上本地工作正常.然而,一旦部署到DEV环境,我会得到不同的结果.上传文件的第一次尝试导致流是什么,我在这里寻找的单词是什么,不可读?它正确地报告了它的长度,但试图将信息拉出来却一无所获.后续读取确实有数据,一切都按预期工作.
我会告诉你相关的代码pices.首先,简化了gen的HTML表单:
<form action="/Events/ImportLocal" enctype="multipart/form-data" method="post">
<input id="uploadFile" name="uploadFile" type="file" />
<input type="submit" value="Upload Events" />
</form>
Run Code Online (Sandbox Code Playgroud)
非常直截了当:
控制器动作(原谅这个烂摊子,我现在已经乱砍了几个小时了):
[HttpPost]
public ActionResult ImportLocal(HttpPostedFileBase uploadFile)
{
if (uploadFile == null || uploadFile.ContentLength <= 0)
{
BaseLogger.Info("uploadFile is null or content length is zero...");
//Error content returned to user
}
BaseLogger.InfoFormat("Community Import File Information: Content Length: {0}, Content Type: {1}, File Name: {2}",
uploadFile.ContentLength, uploadFile.ContentType, uploadFile.FileName);
//This logger …Run Code Online (Sandbox Code Playgroud) 目前正在编写API站点(.NET Web Api 2.1)
对于我们以前的API站点,我们使用了Ninject.MVC3包并手动连接了依赖项解析器和范围,并根据建议将我们的逻辑插入到NinjectWebCommon中.
这导致我们的新项目出现胃灼热,无参数构造函数错误.在过去,这是一个死的赠品,我们没有正确地连接Web Api中的依赖性解析器.只有这一次,我们是.它就在那里.
var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
Run Code Online (Sandbox Code Playgroud)
所以我有点失落.在上周,我看到Ninject已更新,WebAPI nuget包已复活,因此我决定尝试实施.
我安装了NuGet包Ninject.Web.WebApi(版本3.2).这似乎不包括应用绑定的NinectWebCommon.cs文件.它只添加了必要的组件.做一些挖掘我偶然发现了这个实现.
https://gist.github.com/odytrice/5842010
(我不清楚Nuget包是否正在为我做这个,这都是冗余代码.如果是这样,那很好,我只需要了解如何使用nuget包添加我们的绑定.)
除了加载模块之外,我在线上实现了这一行,我将三个单独的模块加载为测试.
public static INinjectModule[] Modules
{
//get { return new INinjectModule[] { new MainModule() }; }
get { return new INinjectModule[] { new GlobalModule(), new InventoryModule(), new StoreModule() }; }
}
Run Code Online (Sandbox Code Playgroud)
我已经验证了使用这个新代码设置了依赖项解析器.
_resolver = new NinjectHttpResolver(modules);
GlobalConfiguration.Configuration.DependencyResolver = _resolver;
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在.
ExceptionMessage:
An error occurred when trying to create a controller of type 'StoreSearchController'.
Make sure that the controller has a …Run Code Online (Sandbox Code Playgroud) 我正在为工作中的应用程序进行错误修复工作,其中先前的开发人员(自那以后)不打算在专门用于列出数据结果的页面上对数据结果进行分页.
当然,当用户开始在IE中看到长时间运行的脚本错误时,这已经让人头疼了.这与纯粹的数据量大小相结合,使得网页几乎无用.
快进到我尝试修复它并且它们已经很好了.该站点是一个.NET MVC 2站点,它是使用DataTables在客户端上添加搜索/排序/分页功能而开发的.我刚刚使用jqGrid完成了一个类似的任务,所以认为这将是相对简单的.除了一个小问题外,它一直存在.我不能为我的生活获取生成的页面链接.
快速结果视图:
结果知道此查询中有2086条记录:

但是不会生成分页链接.

我的动作方法是通过返回JSON
return Json(new
{
param.sEcho,
iTotalRecords = totalRecords,
iTotalDisplayRecords = filteredContracts.Count(),
aaData = result
},
JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)
哪里
param.sEcho ="1",iTotalRecords = 2086,iTotalDisplayRecords = 25,aaData是要显示的数据的数组结果
为了彻底,他是数据表初始化语句:
$("#tblToDoItems").dataTable({
'bServerSide': true,
'bProcessing': true,
'sAjaxSource': '/Home/GetContractList',
"bJQueryUI": true,
"bAutoWidth": false,
"bPaginate": true,
"sPaginationType": "full_numbers",
"iDisplayLength": 25,
/* make the first and last columns not sortable */
"aoColumnDefs": [
{ "bSortable": false, "aTargets": [0, -1] }
]
});
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了一些阻止DataTables通过服务器端数据检索正确生成分页的设置?
这将是一个很长的帖子,所以请跟我一起.
我们在几个月前在工作中实现的生产站点之一,我开始经常在ELMAH日志中看到可怕的连接泄漏错误消息.
"Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached."
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为我们正在使用EF并且连接处理应该是自动的.
所以我开始挖掘.我考虑的第一个潜在罪魁祸首是MiniProfiler(或者我应该说,我们使用miniprofiler的实现).我们一直在使用它并且它一直运行良好,但我担心潜在的连接泄漏.
public OurContext() : base(GetProfilerConnection(), true)
{}
private static DbConnection GetProfilerConnection()
{
return new EFProfiledDbConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString),
MiniProfiler.Current);
}
Run Code Online (Sandbox Code Playgroud)
我的印象是基本调用中的"true"参数导致上下文获取连接的所有权,所以我认为这应该正常工作并且连接将被处理掉.

在我们的Enhancement DEV分支中,我删除了miniprofiler,因为它尚未更新以支持EF5,我们将在不久的将来进行迁移,所以这应该作为一个问题删除.
值得关注的是"我们正确处理我们的datacontexts"吗?所以我在试用版上下载了Entity Framework Profiler并拿走了我们最重的页面并进行了测试.

结果明确表明,我们打开的任何背景都是封闭的,然而我所关注的部分是我们打开的背景数量.我们的DI容器(Ninject 2)设置为每个Web http请求设置一个上下文,我认为这是正确的.我们在应用程序中处理图像的方式会产生问题.特别是该页面在数据库中最多可以有七个图像.这些图像中的每一个都通过MVC动作包含在页面中.像这样:
[<img src="/Controller/GetPhotoAction/[ImageId] />]
Run Code Online (Sandbox Code Playgroud)
由于图像是separte请求,因此打开单独的上下文.因此,对于这个特定页面,如果我正确理解这一点,我们将使用连接池中的七个不同连接.无论多少用户乘以此,我都会看到上面的错误消息是真的.
将图像存储在数据库中的原因是双重的.一,我们用于管理此应用程序数据的管理应用程序位于美国西海岸,但托管该应用程序的服务器位于美国东海岸.我们的网络在西海岸工作和东海岸的服务器之间有一条VPN隧道.该应用程序也是负载平衡(2个Web前端).决定将图像存储在数据库中以避免通过VPN隧道复制图像,然后处理将图像写入每个服务器上的Web应用程序内的文件位置的权限(这两个位置也是完全不同的域) .
在此期间,我们测试时,我们已经在连接字符串中增加了最大连接池大小,并将在下周初将其部署到PROD.
所以,我的问题是:
1)我在这里进行泄漏检查是否覆盖了我的基地?我相信我有.我在上面提到的任何事情都错了吗?
2)如果此页面上的多个数据上下文被证明是罪魁祸首,那么关于如何将图像写入全国两个服务器并牢记权限的建议将跨域?实际上,我想要做到这一点,但技术障碍比我们在假期前的这个时候愿意做的多一点.
3)如果您认为以上都不是问题,我可能会错过什么?真的是请求足够高,我们遇到了这个错误,我们需要扩展吗?我可以挖掘日志来查看使用统计信息,但似乎不太可能.此页面缓存了一个小时(根据参数有所不同)
我在我的ASP.NET MVC3项目中使用NinjectMVC3.
我有3层
Foo.Web引用Foo.Services但不引用Foo.Data.我的一个服务看起来像这样
public class FooService : IFooService
{
private readonly IFooRepository _fooRepository;
public FooService(IFooRepository fooRepository)
{
_fooRepository = fooRepository;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
NinjectMVC3在Foo.Web启动时执行此引导方法
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IFooService>().To<FooService>();
kernel.Bind<IFooRepository>().To<FooRepository>();
// Foo.Web doesn't know what FooRepository is
}
Run Code Online (Sandbox Code Playgroud)
如何从Foo.Web注入FooServices依赖项?
asp.net-mvc dependency-injection ninject separation-of-concerns asp.net-mvc-3
我正在使用一个大型AutoMapperConfiguration类来使用实际的配置文件.全球现在看起来像是这样(暂时原谅Open/Close违规)
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
Run Code Online (Sandbox Code Playgroud)
让我超越顶部的关键部分和以前总是阻止我使用配置文件的障碍是我的ninject绑定.我永远无法使绑定工作.之前我有这个绑定:
Bind<IMappingEngine>().ToConstant(Mapper.Engine).InSingletonScope();
Run Code Online (Sandbox Code Playgroud)
我已经迁移到这个绑定:
Bind<IMappingEngine>().ToMethod(context => Mapper.Engine);
Run Code Online (Sandbox Code Playgroud)
这现在有效,应用程序功能齐全,我有个人资料,事情很好.
这个故障现在在我的单元测试中.使用NUnit,我将设置我的构造函数依赖项.
private readonly IMappingEngine _mappingEngine = Mapper.Engine;
Run Code Online (Sandbox Code Playgroud)
然后在我的[Setup]方法中构建我的MVC控制器并调用AutoMapperConfiguration类.
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
AutoMapperConfiguration.Configure();
}
Run Code Online (Sandbox Code Playgroud)
我现在修改为.
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用.当我点击使用映射的方法时,映射似乎没有被拾取,AutoMapper抛出一个异常,说明映射不存在.有关如何/如何更改测试中的映射器定义/注入以解决此问题的任何建议?我猜测IMappingEngine字段的定义是我的问题,但不确定我有什么选择.
谢谢
所以我一直在玩最新版本的WCF Web API,并决定用它来实现Ninject.
基于我读过的内容,我需要实现IResourceFactory接口,该接口需要以下方法:
public object GetInstance(System.Type serviceType,
System.ServiceModel.InstanceContext instanceContext,
System.Net.Http.HttpRequestMessage request);
public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext,
object service);
Run Code Online (Sandbox Code Playgroud)
所以我把鸡抓了下面:
public class NinjectResourceFactory : IResourceFactory
{
private readonly IKernel _kernel;
public NinjectResourceFactory()
{
var modules = new INinjectModule[]
{
new ServiceDIModule(), //Service Layer Module
new RepositoryDIModule(), //Repo Layer Module
new DataServiceDIModule()
};
_kernel = new StandardKernel(modules);
}
#region IResourceFactory Members
public object GetInstance(Type serviceType,
InstanceContext instanceContext,
HttpRequestMessage request)
{
return Resolve(serviceType);
}
public void ReleaseInstance(InstanceContext instanceContext, object service)
{ …Run Code Online (Sandbox Code Playgroud) 这只是一个我无法弄清楚如何使其工作的例子.
在我的MVC3 Controller文件夹中,如果我添加一个名为"Admin"的新文件夹并添加带有"Index"操作的控制器"News",则在尝试打开该URL时会出现服务器错误(404):
即使你在它后面输入"/ Index",它也行不通.你怎么能形成一个层次结构,导致类似的URL?为了清楚起见,我想创建URL,如:
HTTP:// URL /文件夹1 /文件夹2 /控制器/行动
谢谢
我有我认为的标准.NET MVC3存储库模式项目,我一直在玩/学习.这是非常标准的结构.
我遇到了一个场景,我需要注入一个类的私有成员,该类只有一个静态构造函数,这使得构造函数注入失败.
有问题的类是使用我刚刚完成的AppFabric缓存实现的包装器.(对于那些如此倾向的人,我的实施基于 http://cgeers.wordpress.com/2010/07/04/windows-server-appfabric-caching/)
基本上我有:
静态类缓存是我想要注入一个解析为DefaultCacheProvider的ICacheProvider的地方.
private static readonly ICacheProvider CacheProvider;
static Cache()
{
//DependencyResolver.Current.GetService<ICacheProvider>();
//CacheProvider =
// (ICacheProvider)ServiceLocator.Current
// .GetInstance(typeof(ICacheProvider));
}
public static void Add(string key, object value)
{
CacheProvider.Add(key, value);
}
public static void Add(string key, object value, TimeSpan timeout)
{
CacheProvider.Add(key, value, timeout);
}
public static object Get(string key)
{
return CacheProvider[key];
}
public static bool Remove(string key)
{
return CacheProvider.Remove(key);
}
Run Code Online (Sandbox Code Playgroud)
根据我所读到的内容,这似乎是ServiceLocator的一个场景,但我已经看到了一些非常强烈的意见(反模式等等),而且我对它的熟悉程度很低,所以我不确定可行的实施.
我已经看到StackOverflow上的建议将Cache类设计为标准类并在SingletonScope中注入ICacheProvider
kernel.Bind<ICacheProvider>().To<DefaultCacheProvider>().InSingletonScope(); …Run Code Online (Sandbox Code Playgroud) c# dependency-injection ninject service-locator asp.net-mvc-3
我正在尝试在我当前的项目中使用Contentful,我正在尝试了解如何根据链接对象中的字段过滤我的查询结果.
我的顶级对象包含一个定义如下的链接:
"name": "Service_Description",
"fields": [
{
"name": "Header",
"id": "header",
"type": "Link",
"linkType": "Entry",
"required": true,
"validations": [
{
"linkContentType": [
"offerGeneral"
]
}
],
"localized": false,
"disabled": false,
"omitted": false
},
Run Code Online (Sandbox Code Playgroud)
此"标头"字段链接到具有此定义的另一种内容类型:
"fields": [
{
"name": "General",
"id": "general",
"type": "Link",
"linkType": "Entry",
"required": true,
"validations": [
{
"linkContentType": [
"genericGeneral"
]
}
],
"localized": false,
"disabled": false,
"omitted": false
},
Run Code Online (Sandbox Code Playgroud)
然后链接到最低级别:
"fields": [{
"name": "TagList",
"id": "tagList",
"type": "Array",
"items": {
"type": "Link",
"linkType": "Entry",
"validations": [ …Run Code Online (Sandbox Code Playgroud) 最近我通过Pro Entity Framework 4.0书籍了解了Entity Framework ...
现在,我想通过EF编写项目......有了这些条件,哪种方式更好,更灵活?
我的意见是模型优先!但我想知道你的意见?
谢谢!
无论如何在MVC 3中使用DataAnnotations不允许在文本框中使用HTML?我看到了一种允许使用HTML(AllowHTMLAttribute)的方法,但是如果我不希望用户在文本框中键入任何HTML并想要警告他呢?
谢谢 :)
我像这样使用viewstate:
public bool SearchClicked
{
get { return Session["bool"]==null? false : (bool)Session["Bool"]; }
set { Session["bool"] = value; }
}
Run Code Online (Sandbox Code Playgroud)
在按下按钮的代码中,触发了事件.
我设定了它:
SearchClicked=true;
Run Code Online (Sandbox Code Playgroud)
每回发一次,我都会检查它是否属实:
if (SearchClicked)
{
}
Run Code Online (Sandbox Code Playgroud)
当我启动网站并且有回发时,该值设置为"true".
确实,我在运行应用程序之前按下了将其设置为true的按钮几次.但每次运行应用程序时,应用程序实例都是新的.这是不是意味着每次运行应用程序时ViewState都会自行重置,并且不像Session(20分钟)那样保存其状态?
asp.net-mvc ×7
.net ×6
ninject ×6
c# ×4
asp.net ×2
ado.net ×1
automapper ×1
c#-4.0 ×1
contentful ×1
datatables ×1
html ×1
jquery ×1
nunit ×1
viewstate ×1
wcf-web-api ×1