2008-11-18 6 views
10

내부 네트워크에서 호스팅되는 웹 프런트 엔드와 예약 된 작업으로 모두 액세스해야하는 앱을 만들고 있습니다. 내부 시스템 외부에서 액세스해야하는 것은 없으며 일단 앱이 실행되면 얼마 동안 변경되는 것을 상상하지 않습니다.웹 서비스 또는 DLL?

필자가 생각한 DLL은 대량의 필요한 기능을 캡슐화 한 다음 수동 실행을위한 Web Forms 인터페이스와 자동화 된 (매일) 예약 된 작업으로 실행되는 콘솔 응용 프로그램을 통해 호출하는 것입니다.

또 다른 제안은 핵심 기능을 위해 웹 서비스를 노출하는 것이 었습니다. 그러나 앱이 외부 리소스에 의해 호출 될 필요가 없으므로 웹 서비스 구현에 필요한 추가 노력이 번거 로움을 감수 할만한 가치가 없을 수도 있습니다. . DLL 솔루션도 상당히 빨라야합니다 (?).

내 질문에 어떤 경로를 선택 하시겠습니까? 내가 다뤘던 찬성/반대 의견이 있습니까? 눈부신 누락이 있습니까?

면책 조항 : .Net에 새로 왔지만, 개발자 중 한 명이 심각한 사고에 관련되어 있기 때문에 나는 판에 올라갈 것을 요청 받았습니다.

답변

13

개인적으로 말하면, 나는 DLL을 사용한다. 그것은 빠르고 간단합니다.

웹 서비스를 사용하면 네트워크, 방화벽, 성능 등을 고려해야합니다. 클라이언트의 웹 서비스를 사용할 수 없으므로 디버그하기가 더 어려워집니다. 호출의 양쪽에 중단 점을 설정해야합니다.

웹 서비스의 또 다른 문제점은 훨씬 더 강력한 처리 실패가 필요하다는 것입니다. DLL을 사용하면 메서드 호출이 성공할 것이라는 것을 알지만 웹 서비스를 사용하면 호출 할 때마다 호출이 실패하거나 시간 초과 될 수 있도록 준비해야합니다.

마지막으로 나중에 웹 서비스가 필요한 경우 최소한의 추가 작업으로 DLL을 웹 서비스로 쉽게 변환 할 수 있어야합니다.

2

웹 서비스는 많은 경험과 많은 시간을 필요로하는 번거 로움입니다. 나는 건의한다 - PONO (보통 오래된 .net 목표)를하고십시오, 그러나 공용 영역을 이용하십시오. Spring.NET 프레임 워크를 살펴보십시오.이 객체를 어떤 유형의 (웹) 서비스로도 내보낼 수 있으므로, 강요 할 필요가 없습니다. 클라이언트 측에서는 스프링을 사용하여 종속성 삽입을 수행하고 구성 파일의 값을 변경하여 in-process DLL 또는 웹 서비스 구현을 원할지 여부를 결정할 수 있습니다. 또한 Spring에는 Quartz 스케줄러 통합이있다.

0

개인적으로, 나는 당신이 말한 것을 할 것입니다; 내 논리를 DLL에 넣으십시오. 그런 다음 앱, webservice에서 DLL을 사용하고 앞으로 요청할 인터페이스를 결정하십시오.

3

지금은 이 아니며은 웹 서비스를 생성해야합니다. 서버에 다른 IIS 서비스를 유지해야합니다. 나중에 DLL이 필요한 인터페이스를 만들면 간단히 참조 할 수 있습니다. 따라서 예방할 필요가 없습니다.

1

DLL을 사용하는 것이 옳습니다. 더 빠르며, 미래에 이러한 dll (필요한 경우)을 사용하여 웹 서비스보다 보안이 강화 된 웹 서비스를 만들 수있는 자유를 제공합니다.

0

정말 많은 정보가 필요합니다. 요구 사항이 정확히 무엇인지 아는 것만으로 대답하기가 어렵습니다.계층화 된 접근 방식 (dll/separate class)은 간단하고 빠릅니다. 계층화 된 접근 방식 (웹 서비스)을 통해 하나의 환경을 갖게되고 더 추상적 인 환경을 제공 할 수 있습니다. 클라이언트를 변경하지 않고 웹 서비스의 코드를 변경할 수 있습니다.

하지만 이것을 평가하려면이 DLL이 수행 할 프로젝트가 무엇인지 알아야합니다. 그렇지 않으면 당신은 단지 사람들의 기호를 듣고 있습니다.

0

어셈블리의 논리를 캡슐화하면 솔루션의 경우 도메인의 경계를 벗어나는 것이 없으므로 내부 응용 프로그램 모두 디자인하는 구성 요소에 의해 노출 된 기능을 사용하게되므로 충분합니다.

유지 관리의 편의를 위해 URL에서이 어셈블리를 쉽게로드 할 수 있습니다.이 구성 요소를 웹 서비스에 랩핑해야 할 필요가있는 경우 해당 라인을 아래로 내려 가면 코드가 웹 프록시 클래스를 만들 수 있습니다. 최소한의 코드 변경.

0

나는 비슷한 응용 프로그램을 개발 중입니다. 가져온 접근 방식은 dll에서 내 추출 논리를 갖는 것입니다. 이것은 웹 서비스를 통해 노출됩니다. 나는 웹 서비스를 간단하게 찾을 필요가 없기 때문에 인터페이스를 삭제하거나 클라이언트에서 클라이언트에 데이터를 캡슐화하기 위해 클래스를 사용한다. 그런 다음 웹 개발자와 winforms 개발자가 자신의 프레젠테이션 레이어를 작성합니다. 장단점이 있지만 웹 서비스는 단일 레이어를 사용하기 때문에 더 간단합니다. 원격을 사용하여, 나는 여분의 인터페이스 또는 각 클라이언트에 설치되어야하는 클라이언트 사이드 라이브러리가 필요합니다. 이 방법은, 나는 다른 GUI가 독립적 인 동안 나는 단지 서버 측을 관리한다. 나는 느슨한 결합 코딩을 좋아한다. 우리는 또한 웹 서비스를 사용하는 수많은 Windows 서비스를 실행합니다. 우리 회사는 신용 카드 회사이며 많은 시스템과 상호 작용합니다. 웹 서비스는 유연성을 가장 많이 사용합니다.

결국, 귀하의 요구 사항을 고려하여 귀하의 개인 취향에 따라 결정됩니다. 나는 최소한의 노력으로 변경하는 능력을 고려하지 않고 다른 것보다 1을 선택하지 말 것입니다. 나는 끊임없이 추가 된 새로운 요구 사항으로 빠르게 변화하는 rad 어플리케이션을 발견했습니다. 시간을내어 프로젝트 및 범위의 범위와 수명을 결정하십시오. 당신의 강점을 발전 시키십시오.

-1

와우 와우 와우. 그들은 모두 하나의 DB를 공유합니까? 그럴 경우, 아니, 아니, 아니. DB가 공유되지 않는다면, 확실히 DLL입니다.

올바른 선택은 웹 서비스입니다. 이유는 너무 간단합니다.

1) 도메인 모델과 비즈니스 로직의 일관성. 열에 열거 형을 저장하고 열거 형을 추가하고 하나의 응용 프로그램에 배포한다고 가정 해 보겠습니다. 이제 다른 두 응용 프로그램이 중단됩니다.

2) 쉬운 배치. 하나의 변경 = 하나의 배포. 그것이 dll이라면, 하나의 변경 = 3 배포.

3) DB 트랜잭션 및 동시성 제어. 하나의 앱 도메인에서 더 쉽게 해결할 수 있습니다.

다른 사람들이 제안한 단점에 대해서는 너무 부분적입니다.

1) 앱 도메인에서 디버깅하는 데 어려움이 있습니다. WSDL을 통해 가능한 예외를 오류 예외로 게시해야합니다. 호출 클라이언트는 이러한 오류 예외를 적절하게 처리해야합니다. 호출하는 클라이언트와 서버 모두에서 단위 테스트와 mock을 설정하는 것도 매우 쉽습니다. 중단 점은 분산 응용 프로그램을 디버깅하고 작업하는 올바른 방법이 아닙니다. 할 수 있고, 어렵지도 않습니다. 나는 그것이 올바른 접근이라고 생각하지 않습니다.

2) 성능. WCF를 사용하면 구성을 통해 다른 바인딩을 설정할 수 있습니다.기본 http (디버그하기 쉽습니다)에서 네이티브 호출 성능을 얻기 위해 사용할 수있는 명명 된 파이프까지. 이 결정은 (거의 당신이 고려해야 할 바인딩이 다른 몇 가지 단점이 있습니다.) 개발 후에도 결정할 수 있습니다.

3) 보안. WCF가 보안을 처리하지 않는다고 말하는 것은 재미 있습니다.

마지막으로, 나에게서 실제 죄수 :

1) 더 복잡합니다. 동의했다. 상황이 다르면 응용 프로그램 설계가 더 어려워집니다. 그건 두 가지 방법으로 간다. 이러한 복잡성으로 인해 계층이 명확하게 구분됩니다. 프레젠테이션 컨텍스트는 프레젠테이션 수준에서 그대로 유지해야합니다.

2) 더 많은 계획이 필요합니다. WCF 웹 서비스 계약을 설계하는 것은 그 자체가 예술입니다.

3) 구성을위한 관리 오버 헤드. 더 새로운 개발자들에게는 어려운 일이지만,이 장애물을 빨리 극복 할 수 있기를 바랍니다. WCF 구성은 강력하면서도 복잡한 복잡한 양날 검입니다 (일부의 경우).

내 개인적인 경험은 DB가 공유되고 DLL이 여러 응용 프로그램 도메인에서 사용되는 경우 언제든지 웹 서비스 경로로 갈 수있을만큼 개발자 팀을 해머하지 않았 음을 후회합니다.

그럼 최종 결정은 무엇입니까? 지금은 4 년이되었습니다.

+0

질문이 게시 된 시간입니다. 이 비슷한 질문을 행동 해보십시오. 대답은 웹 서비스입니다. http://stackoverflow.com/questions/7877916/web-service-vs-dll-pros-and-cons –

+1

예 - 그게 괴사예요. 당시 WCF는 문제가되지 않았습니다. DLL은 우리가 간 방법이었고 앱은 4 년 동안 프로덕션에서 행복하게되었습니다! –

-1

내가 접수 대답은 DLL을 사용하도록 adviced 한 ...

했다 믿을 수 없다 "우리가 몇 시간 동안 변경 아무것도 상상하지 않습니다."

그래서 우리는 개발자가 이러한 결정을 내릴 때 작성한 문제를 수정해야합니다. 오늘은 생각하지 말고 내일 생각해. 데이터베이스 항목은 클라이언트에서 숨겨져 야합니다. 새 클라이언트를 추가해야하는 경우와 내일 새 클라이언트를 추가해야하는 경우는 어떻게됩니까? 적절한 계약을 맺고 웹, 또는 서비스를 이용하십시오.

+0

글쎄, 5 년 반이 지난 지금, 앱은 그 시간 동안 프로덕션에 있었고 WS에서 이익을 얻는 행동으로 확장 할 필요가 없었습니다. –

관련 문제