저는 AppHarbor에서 SQL Server 부가 기능에 의해 호스팅되는 데이터베이스를 관리하기 위해 Entity Framework 및 Code-First를 사용하는 wcf RESTful 웹 서비스를 개발 중입니다. 자, 응용 프로그램을 호스팅하기 위해 IIS를 시작하는 Visual Studio 디버그를 사용하여 로컬로 응용 프로그램을 실행하면 모든 것이 완벽하게 작동합니다. 그러나 AppHarbor에 배포 된 (오류없이) 서비스를 테스트하면 모든 것이 잘못되어 400 개의 잘못된 요청이 수신됩니다.AppHarbor에서 실행할 때 내 앱이 다르게 작동하는 이유는 무엇입니까?
public class DatabaseEntities : DbContext
{
public DatabaseEntities() : base("name=DatabaseConnectionString") { }
public DbSet<User> Users { get; set; }
public DbSet<Cloud> Clouds { get; set; }
public DbSet<UserCloudConn> UserCloudConn { get; set; }
}
public class User
{
[Key]
[Column(Order = 1)]
public int id { get; set; }
[Key]
[Column(Order = 2)]
public string email { get; set; }
public string password { get; set; }
public string accessToken { get; set; }
public string name { get; set; }
public string surname { get; set; }
public virtual ICollection<UserCloudConn> userCloudConn { get; set; } // ogni user ha n tuple in UserCloudConn
}
public class Cloud
{
[Key]
public int id { get; set; }
public string name { get; set; }
public string appKey { get; set; }
public string appSecret { get; set; }
public virtual ICollection<UserCloudConn> userCloudConn { get; set; } // ogni cloud ha n tuple in UserCloudConn
}
public class UserCloudConn
{
[Key]
[Column(Order = 1)]
public int userId { get; set; }
[Key]
[Column(Order = 2)]
public int cloudId { get; set; }
public string accessToken { get; set; }
public string accessSecret { get; set; }
public string email { get; set; }
public string password { get; set; }
public string refreshToken { get; set; }
public int expireIn { get; set; }
public string tokenType { get; set; }
public string timeStamp { get; set; }
public virtual Cloud cloud { get; set; } // Ogni tupla in UserCloudConn è associata ad un cloud
public virtual User user { get; set; } // Ogni tupla in UserCloudConn è associata ad uno User
}
:
var cloudsConn = (from c in context.UserCloudConn where user.id == c.userId select c);
foreach (UserCloudConn conn in cloudsConn)
{
list.Add(conn.cloud.name); // HERE THE STACK TRACE GIVE ME AN ERROR. LINE 870
}
이것은 내가 사용하는 모델입니다 : 예를 들어
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.Execute(MergeOption mergeOption)
at System.Data.Entity.Core.Objects.DataClasses.EntityReference`1.Load(MergeOption mergeOption)
at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()
at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject)
at System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.<>c__DisplayClass7`2.<GetInterceptorDelegate>b__2(TProxy proxy, TItem item)
at System.Data.Entity.DynamicProxies.UserCloudConn_100557DBEEC4B39F64FD7786B8E2F4080B576D2C357C3C1161822268F4233178.get_cloud()
at CloudStorageManager.MainService.GetActiveServices(UserCredential data) in d:\temp\inywl51q.z0c\input\DropboxWebService\Services\MainService.svc.cs:line 870
at CloudStorageManager.MainService.GetAvailableServices(UserCredential data) in d:\temp\inywl51q.z0c\input\DropboxWebService\Services\MainService.svc.cs:line 943
at SyncInvokeGetAvailableServices(Object , Object[] , Object[])
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
이 appharbor 문제를 줄의 코드 내 작품은 다음과 같습니다 이 HTTP 응답에서 스택 추적입니다
EDIT : 몇 가지 테스트를 수행했는데 문제가 클라우드 특성을 사용하는 것으로 나타났습니다. 가상 클래스 인 UserCloudConn 클래스. 내 데이터베이스에서 클라우드를 얻으려면 linq을 사용하여 또 다른 쿼리를해야한다고 생각하지만, 왜 이것이 appharbor에서 작동하지 않지만 로컬 컴퓨터에서 작동합니까 ????
스택 추적은 데이터 수준의 문제이며 웹 서비스와 관련이 없음을 보여줍니다. 예외 유형 및 메시지 란 무엇입니까? – Dai
음, AppHarbor에서 모든 일이 발생하므로 예외가 무엇인지 알 수 없습니다. AppHarbor에있는 동안 어떻게 디버깅 할 수 있습니까? – Cardella