Невозможно получить доступ к удаленному объекту.
Имя объекта: 'System.Net.Sockets.TcpClient'.
Я не понимаю, почему это происходит и как с этим бороться. Я использую Ninject, мое приложение основано на mvcstarter.codeplex.com/, что я делаю, это удаляю некоторых пользователей или страницы из моей базы данных, и это происходит без причины (которую я могу найти).
Любая помощь будет оценена!
Большое спасибо!
* Отредактировано
Кроме того, через некоторое время все приходит в норму, и я могу получить свои данные из Mongo ... Мои модульные тесты работают нормально ...
Вот мой код для моей сессии:
public class MongoSession : ISession{
private readonly Mongo _server;
public MongoSession()
{
//this looks for a connection string in your Web.config - you can override this if you want
_server = Mongo.Create("MongoDB");
}
public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class {
return _server.GetCollection<T>().AsQueryable().Where(expression).SingleOrDefault();
}
public IQueryable<T> All<T>() where T : class {
return _server.GetCollection<T>().AsQueryable();
}
/*public void Add<T>(T item) where T : class {
_provider.DB.GetCollection<T>().Insert(item);
}*/
public void Save<T>(IEnumerable<T> items) where T : class {
foreach (T item in items) {
Save(item);
}
}
public void Save<T>(T item) where T : class {
var errors = DataAnnotationsValidationRunner.GetErrors(item);
if (errors.Count() > 0)
{
throw new RulesException(errors);
}
_server.Database.GetCollection<T>().Save(item);
}
//this is just some sugar if you need it.
/*public T MapReduce<T>(string map, string reduce) {
T result = default(T);
using (MapReduce mr = _provider.Server.CreateMapReduce()) {
MapReduceResponse response =
mr.Execute(new MapReduceOptions(typeof(T).Name) {
Map = map,
Reduce = reduce
});
MongoCollection<MapReduceResult<T>> coll = response.GetCollection<MapReduceResult<T>>();
MapReduceResult<T> r = coll.Find().FirstOrDefault();
result = r.Value;
}
return result;
}*/
public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class
{
var items = All<T>().Where(expression);
foreach (T item in items)
{
Delete(item);
}
}
public void Delete<T>(T item) where T : class
{
_server.GetCollection<T>().Delete(item);
}
public void Drop<T>() where T : class
{
_server.Database.DropCollection(typeof(T).Name);
}
/*public void CommitChanges()
{
//mongo isn't transactional in this way... it's all firehosed
}*/
public void Dispose() {
_server.Dispose();
}
}
И вызывающий код будет выглядеть примерно так: моя _сессия передается моему контроллеру в contrutor, использующем Ninject, с привязкой в моем global.cs:
Bind<ISession>().To<MongoSession>().InSingletonScope();
public virtual ActionResult Liens()
{
var shortcutLionks = _session.All<ShortcutLinks>().ToList();
ViewData.Model = shortcutLionks.Count > 0 ? shortcutLionks[0] : new ShortcutLinks();
return View();
}
РЕДАКТИРОВАНИЕ:
Вот подробности моей ошибки:
Трассировка стека: в
System.Net.Sockets.TcpClient.GetStream ()
в Norm.Connection.GetStream () в
Norm.Connection.Write (Byte [] bytes,
Начало Int32, размер Int32) в
Norm.Protocol.Messages.QueryMessage 2.Execute()
at
Norm.MongoQueryExecutor
3.d__0.MoveNext ()
в
System.Linq.Enumerable.SingleOrDefault [TSource] (IEnumerable 1
source) at
Norm.Linq.MongoQueryExecutor.Execute[T]()
at
Norm.Linq.MongoQueryProvider.ExecuteQuery[T](Expression
expression) at
Norm.Linq.MongoQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression
expression) at
System.Linq.Queryable.SingleOrDefault[TSource](IQueryable
1
источник) в
Domain.Storage.MongoDB.MongoSession.Single [Т] (Выражение 1
expression) in
C:\inetpub\wwwroot\DubeLoiselle\Domain\Storage\MongoDB\MongoSession.cs:line
21 at
Domain.Storage.MongoDB.MongoRepositoryBase
1.Single (Выражение * 2 * тысяча двадцать-пять
параметры) при
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext
controllerContext, ActionDescriptor
actionDescriptor, продолжение IDictionary 2
parameters) at
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.b__a()
at
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter
filter, ActionExecutingContext
preContext, Func
1) в
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (ControllerContext
controllerContext, параметры IList 1 filters,
ActionDescriptor actionDescriptor,
IDictionary
2) в
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext
controllerContext, String actionName)
Отредактировано снова:
Перед тем, как я получаю эту ошибку, я ловлю эту:
Невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хостом.
Трассировка стека: в System.Net.Sockets.NetworkStream.Write (буфер Byte [], смещение Int32, размер Int32) в Norm.Connection.Write (байты [], начало Int32, размер Int32) в Norm.Protocol .Messages.QueryMessage 2.Execute() at Norm.MongoQueryExecutor
3.d__0.MoveNext () в System.Linq.Enumerable.SingleOrDefault [TSource] (источник IEnumerable 1 source) at Norm.Linq.MongoQueryExecutor.Execute[T]() at Norm.Linq.MongoQueryProvider.ExecuteQuery[T](Expression expression) at Norm.Linq.MongoQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable
1) в домене * 1.Single (Выражение 1 expression) in C:\inetpub\wwwroot\DubeLoiselle\Domain\Storage\MongoDB\MongoRepositoryBase.cs:line 26 at SPK.CMS.Domain.Repository.PageRepository.GetHomePage() in C:\inetpub\wwwroot\DubeLoiselle\SPK.CMS.Domain\Repository\PageRepository.cs:line 146 at SPK.CMS.Domain.Repository.PageRepository.GetByUrl(String url1, String url2, String url3) in C:\inetpub\wwwroot\DubeLoiselle\SPK.CMS.Domain\Repository\PageRepository.cs:line 195 at Web.Controllers.PageController.RedirectTo(String url1, String url2, String url3) in C:\inetpub\wwwroot\DubeLoiselle\Web\Controllers\PageController.cs:line 52 at lambda_method(ExecutionScope , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 параметра) в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.b__a() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 продолжение) в System.Web.Mvc.ControllerActionInvililTontInteContainerWinterWinterIntelerTimeIntoters (Invo). Параметры IList 1 filters, ActionDescriptor actionDescriptor, IDictionary
2) в System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName)