2014-12-09 4 views
0

BizTalk 도우미 클래스에서 SQL Server 저장 프로 시저를 직접 호출 할 때 발생할 수있는 부작용 및 위험은 무엇입니까?BizTalk 도우미 클래스에서 저장 프로 시저를 직접 호출 할 때 발생할 수있는 부작용은 무엇입니까?

나는 몇 가지 코드를 확인하고 같은 사례를 발견했습니다 ... BizTalk 개발의 측면에서 "나쁜 냄새"처럼 보인다

private static void SaveInvoice(long id, string fileName) 
{ 
    try 
    { 
     using (SqlConnection sqlConnection = new SqlConnection("... server ...")) 
     { 
      sqlConnection.Open(); 
      sqlCommand = new SqlCommand("usp_SaveDocument", sqlConnection); 
      sqlCommand.CommandType = CommandType.StoredProcedure; 
      sqlCommand.Parameters.AddWithValue("@Id", id); 
      sqlCommand.Parameters.AddWithValue("@FileName", fileName); 
      sqlCommand.ExecuteNonQuery(); 
     } 
    } 
    finally 
    { 
     sqlCommand.Dispose(); 
    } 
} 

.

"도우미"코드에서 이와 같은 직접 데이터베이스 호출을 수행 할 때 실제 위험이나 제한이 있습니까?

답변

1

현명한 방법은 '위험'이 없다는 것입니다. SQL Server를 호출하는 .Net 코드입니다.

그러나 BizTalk 응용 프로그램에서는 BizTalk 방식이 아니기 때문에 잘못된 형식이 다를 수 있다고 생각합니다. 스키마, 맵, SQL 어댑터 등이 될 것입니다.

위험은 이러한 작업이 BizTalk 개발자가 기대하는 것이 아닌 앱에 기본적으로 묻힐 위험이 있습니다.

1

내 의견 :

거의 무엇을 달성하려고 하는가에 달려 있습니다. 이 신뢰할 수있는 메시징에 와서 그건 당신이 어댑터를 사용하는 경우 사용중인 정확히 때

  • BizTalk이 매우 좋다. 헬퍼 클래스를 사용할 때는 다른 기술이기 때문에 무엇을하고 있는지 알아야합니다. 오케스트레이션에서 보조 클래스를 호출하는 경우가 종종 있습니다. 당신은

  • BizTalk 응용 프로그램은 당신이 상상할 수있는 제네릭으로 만들 수 있습니다 ... 오류 처리, 추가로 비즈니스 프로세스 아래로 논리의 영향 등에 대한 다른 혹은 더 나은 생각해야하고 구성 꽤 많이 달려있다 바인딩 (송신 포트/수신 위치 모음 등 ...) 시스템에서 시스템으로 이동하는 것은 송신 포트 URI를 변경하는 것만 큼 간단 할 수 있습니다. 헬퍼 클래스를 수행 할 때 어딘가에 저장된 다른 연결 문자열이 필요합니다. 이것은 BTSNTSvc64.exe.config이거나 다른 것일 수 있습니다. 읽기 : 다른 종속성을 추가하여 솔루션을 더 복잡하게 만드는 것입니다.

그래서 저는 오케스트레이션에서 도우미 클래스를 호출하는 것이 특정 환경에서는 완벽하다고 생각합니다.

메시지 자체의 작은 데이터 세트 만 저장할 필요가있는 경우가 있습니다. 예를 들어 중복 검색/자체 추적 유지. 예를 들어 상호 연관시켜야 할 메시지/인스턴스의 내용을 저장해야하는 경우.

헬퍼 클래스를 사용하여 전체 메시지를 SQL 테이블에 저장하는 것은 어떤 이유로 든 내게 좋지 않습니다. BizTalk 어댑터에서 수행 할 수 있습니다.

+0

응답 해 주셔서 감사합니다.나는 도우미에서 데이터베이스 연결을 숨기고 (웹 서비스 호출도 찾았습니다.) BizTalk는 아무 것도 모르고 있으므로 불리한 상호 작용이있을 수 있습니다. – SteveC

+1

대용량 상황에서 어떤 일이 발생하는지, 스레딩, 즉 도우미 클래스 스레드가 안전합니까? 각 스레드가 자신의 연결을 열어 줍니까? 이로 인해 문제가 발생할 수 있습니다. 그러나 헬퍼 클래스를 사용해야하는 상황이 있습니다. http://stackoverflow.com/questions/20644569/how-do-you-configure-a-biztalk-wcf-sql-adapter-to-get-data- from-a-sql-server-201 – Dijkgraaf

0

연결을 관리하는 한 아무런 문제가 없습니다. SqlCommand에 대해서도 "using"문을 사용하는 것이 좋습니다. 지금까지 아무 문제없이 오랫동안 해왔습니다.