2014-04-24 2 views
-1

저는 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.&lt;&gt;c__DisplayClass7.&lt;GetResults&gt;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.&lt;&gt;c__DisplayClass7.&lt;GetResults&gt;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.&lt;&gt;c__DisplayClass7`2.&lt;GetInterceptorDelegate&gt;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[]&amp; outputs) 
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 

이 appharbor 문제를 줄의 코드 내 작품은 다음과 같습니다 이 HTTP 응답에서 스택 추적입니다

EDIT : 몇 가지 테스트를 수행했는데 문제가 클라우드 특성을 사용하는 것으로 나타났습니다. 가상 클래스 인 UserCloudConn 클래스. 내 데이터베이스에서 클라우드를 얻으려면 linq을 사용하여 또 다른 쿼리를해야한다고 생각하지만, 왜 이것이 appharbor에서 작동하지 않지만 로컬 컴퓨터에서 작동합니까 ????

+0

스택 추적은 데이터 수준의 문제이며 웹 서비스와 관련이 없음을 보여줍니다. 예외 유형 및 메시지 란 무엇입니까? – Dai

+0

음, AppHarbor에서 모든 일이 발생하므로 예외가 무엇인지 알 수 없습니다. AppHarbor에있는 동안 어떻게 디버깅 할 수 있습니까? – Cardella

답변

1

로컬 연결 문자열에서 MultipleActiveResulSet을 true로 추가했지만 AppHarbor SQL 서버 설정에서 활성화하지 않았기 때문에이 오류가 발생했습니다. 그래서 그건 내 잘못 이었어. 이제 작동합니다. 감사합니다.

관련 문제