asp.net 멤버쉽을 MVC4의 새 단순 멤버 공급자로 업그레이드하는 중입니다. 이것은 Azure/Sql Azure 앱으로 localhost에서는 제대로 실행되지만 배포시 실패합니다. 내가 역할 클래스를 채울 this technique을 사용하고Simplerole 공급자가 트랜잭션 스코프 내에서 원격 트랜잭션을 발생했습니다.
TransactionOptions toptions = new TransactionOptions();
toptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required, toptions))
{
try
{
... do a bunch of database stuff in a single dbContext ...
var roleprov = (SimpleRoleProvider)Roles.Provider;
string[] roles = roleprov.GetRolesForUser(Username);
// above line fails with The transaction manager has disabled its support for remote/network transactions. (Exception from HRESULT: 0x8004D024)
}
}
다음과 같이 나는 트랜잭션에 코드가 있습니다. 스택 추적은 실제로 해당 호출을 완료하기 위해 하위 트랜잭션을 실행하려고 시도하고 있음을 나타냅니다. simplemembership 테이블은 다른 db에 있습니다. 별도의 트랜잭션 컨텍스트 내에서 역할 공급자로부터 역할 정보를 검색하려면 어떻게해야합니까?
결국 나는 트랜잭션 스코프에서 역할을 끌어내는 방법을 발견했습니다. 조금 어색하지만 작동했습니다. 나는 문제에 대한 좋은 기사를 발견했다. [여기] (http://social.technet.microsoft.com/wiki/contents/articles/handling-transactions-in-sql-azure.aspx) – AldenG
@AldenG. 예, 그래서 ("_ 다른 데이터베이스에 여러 개의 연결이있을 때 _) 위에서 말한 내용을 확인합니다. 결국에는 대신에 SqlTransaction을 사용 했습니까? 저는 Roles와 DbContext를 사용해야한다고 가정 할 때이 옵션을 사용하지 않았습니다. –
나는 한 시간 동안 SqlTransaction을 사용하여 엔티티 프레임 워크와 잘 어울리는 방법을 찾지 못했습니다. 트랜잭션 스코프에서 그것을 빼내는 것이 가장 간단한 해결책이었고 몇 가지 확장 방법이있었습니다 역할에 액세스하려면 코드가 충분히 깨끗해졌습니다. 도움을 주셔서 감사합니다. – AldenG