2010-03-14 1 views
7

응용 프로그램과 함께 작업 중이므로이 환경에서 C# 스크립트를 실행할 수 있습니다. 이 환경에 어떤 종류의 DLL을 가져올 수 있습니다. 내 문제는이 스크립트 사이의 통신을 가능하게하고 싶습니다. 환경이 제어되고 응용 프로그램의 소스 코드에 액세스 할 수 없기 때문에이 작업을 수행하는 방법이 손실되었습니다. 내가 해봤프로세스 간 C# 통신

것들 :

  • 파일 I/O : 그냥 내가이 .txt 파일을 읽어 각을하고자하는 메시지를 작성하고, 다른 하나는 그것을 읽을 필요. 문제는이 스크립트가 아주 빨리 실행해야하고 너무 많은 시간이 걸린다는 것입니다.

  • nServiceBus : 저는 이것을 시도했지만, 제가 다루고있는 환경에서 작동시키지 못했습니다. 나는 그것을 할 수 없다는 말은 아니에요, 그저 내가 할 수 없습니다.

누구든지이 작업을 수행하는 간단한 방법을 알고 있습니까?

+5

C#은 스크립트가 아닌 프로그램을 만드는 언어입니다. –

답변

3

대답은 간단합니다.

스크립트에 DLL을 가져올 수 있으므로 공유 메모리, 명명 된 파이프, TCP/UDP 등 원하는 방식으로 프로세스 간의 통신을 구현하는 사용자 지정 DLL을 만들 수 있습니다.

+1

이러한 답변은 매우 좋았으며 그 중 대부분은 이전에 구현하려고 시도 했었습니다. 결국 내가 할 수있을 것이라고는 생각지 못했던 일을 할 수있게되었고 결국 수업을 만들고 거기에 모든 커뮤니케이션 코드를 넣고 그 수업을 다른 전략에 포함 시켰습니다. 그것은 당신의 대답이 끔찍한 유익한 정보가 아니라 오히려 제가 상황을 지나치게 복잡하게 만든다는 것을 깨닫게했습니다. 고맙습니다. –

3

동일한 프로세스 내에서도 프로세스 간 의사 소통 형식을 사용할 수 있습니다. 스크립트를 별도의 프로세스로 취급하고 그런 식으로 의사 소통을하십시오.

명명 된 파이프는이 상황에서 좋은 옵션이 될 수 있습니다. .NET 3.5에서 매우 빠르고 쉽게 사용할 수 있습니다.

스크립트가 단일 AppDomain으로로드되는 경우 정적 클래스 또는 싱글 톤을 통신 서비스로 사용할 수 있습니다. 그러나 스크립트를 독립적으로로드하면이 작업이 불가능할 수 있습니다.

2

글쎄, 환경의 세부 사항을 알지 못한다면 실제로 제공할만한 것이별로 없습니다. 당신은 "C# scripts"라는 용어를 사용하고 있습니다 ... 나는 C#이 일반적으로 컴파일 된 언어이기 때문에 그것이 무엇을 의미하는지 정확히 알지 못합니다.

일반적인 C#을 사용하는 경우 명명 된 파이프로 WCF를 살펴 보았습니까? 어셈블리가 동일한 실제 컴퓨터에서 실행되는 경우 명명 된 파이프 바인딩을 사용하여 호스팅되는 일부 WCF 서비스를 쉽고 빠르게 만들 수 있어야합니다. 명명 된 파이프는 로컬 컨텍스트에서 간단하고 효율적이며 빠른 메시지 전송 메커니즘을 제공합니다. WCF 자체는 사용하기가 쉽고 .NET Framework의 기본 구성 요소입니다.

1

PipeStream을 사용할 수 있습니다. 메인 메모리를 사용하여 완료되면 디스크 IO보다 빠릅니다.

4

프로세스 간 통신 방법은 각 메시지가 처리되는 것이 얼마나 중요한지에 달려 있습니다.

예를 들어, 프로세스 A가 프로세스 B에게 IT 직원에게 서버가 다운되었다는 전자 메일을 보내라고 말하면 프로세스가 매우 중요합니다.

그러나 오디오를 스트리밍하는 경우 개별 메시지 (패킷)는 앱 성능에 중요하지 않으며 삭제할 수 있습니다.

전자 메일 인 경우 메시지 저장을 위해 데이터베이스와 같은 영구 저장소를 사용하고 각 프로세스가 자체 메시지를 검색하기 위해 데이터베이스를 폴링하도록 고려해야합니다. 이렇게하면 프로세스가 종료되거나 다른 프로세스와 일시적으로 통신이 끊어지면 다시 시작될 때 누락 된 메시지를 검색 할 수 있습니다.

+0

데이빗 고마워요. 데비드 네가해야 할 일에 대해서 내가 가지고 있지 않은 몇 가지 일들을 가져왔다. 궁극적으로 어떤 솔루션이 내게 가장 좋았는지 알게되었습니다. –

2

이미 파일 I/O가 있으므로 RAM 디스크에 파일 I/O를 설치하면 속도가 빨라질 수 있습니다. 오늘 변경 사항을 폴링하는 경우 FileSystemWatcher은 통신 응답 성을 높이는 데 도움이 될 수 있습니다.

1

또 다른 쉬운 방법은 미리 정의 된 포트에서 TCP 소켓을 열고 다른 프로세스에서 TCP 소켓을 연결하고 그런 식으로 통신하는 것입니다.