Pergunta

Estou prestes a escrever uma aplicação "servidor" que é responsável para conversar com hardware externo. O pedido deve lidar com as solicitações dos clientes. Os clientes enviar uma mensagem para o servidor, e se o servidor está ocupado com fazer coisas com o hardware as novas mensagens devem ser armazenados em uma fila que será processada mais tarde.

O cliente também deve ser capaz de cancelar um pedido (se ele está na fila do servidor.). Quando o aplicativo de servidor terminou com o hardware deve ser capaz de enviar parte de trás resultado para o cliente que solicitou o trabalho.

Os aplicativos de servidor e cliente pode ou não estar no mesmo PC. Todo o desenvolvimento é feito em .NET (C #) 2005.

Então, minha pergunta é: qual é a melhor maneira de resolver este problema de comunicação

MSMQ? SABONETE? WCF? Comunicação remota? de outros?

Foi útil?

Solução

Remoting

Se todo o desenvolvimento é feito em .NET de 2005, Remoting é o melhor caminho a percorrer. http://en.wikipedia.org/wiki/.NET_Remoting

Outras dicas

Assumindo que você pode usar .NET 3.0 ou superior, então você provavelmente vai querer WCF como o canal de comunicação - a interface é consistente, mas ele irá permitir que você use um mecanismo de transporte apropriado, dependendo de onde o cliente eo servidor estão em relação a cada outro - assim você pode escolher usar sabão ou MSMQ ou um formato binário ou outras, conforme apropriado (e pode lançar seu próprio se necessário). Ele também aborda a necessidade de comunicação em dois sentidos.

enfileiramento das mensagens no servidor provavelmente deve ser considerado como um problema separado -. Especialmente tendo em conta a necessidade de remover mensagens em fila

Se os clientes e processos servidores estão na mesma máquina, acho Pipes nomeados lhe dará a taxa de transferência mais rápida byte cru. Se os processos estão em diferentes máquinas, você precisa usar Sockets abordagem.

Remoting é declaradamente muito lento. com base nos sistemas operacionais de destino que você está planejando para implantar a solução em que você poderia ter opções como WCF et.all No entanto, a sobrecarga destes protocolos é algo que você pode querer olhar na hora de decidir.

MSMQ faria algum sentido, apesar de existirem, em seguida, considerações de segurança e de implantação. Você poderia olhar para um barramento de serviço (tal s NServiceBus ou MassTransit) e há também SQL Server Service Broker que poderia ajudar (e também pode ser usado por um barramento de serviços como o transporte).

WCF seria outra coisa a olhar, no entanto, que é realmente o transporte através da rede, para que você provavelmente ainda quer as chamadas WCF para colocar uma mensagem na fila do servidor.

Eu não recomendo comunicação remota, porque é difícil manter uma separação de interesses, e antes que você perceba que você está desenvolvendo uma interface muito falador sem perceber. chamadas remotas são caros em termos relativos, por isso você deve estar tentando manter as mensagens bastante grosseiro. WCF seria a minha recomendação. Não menos importante, porque você pode configurá-lo para usar um transporte HTTP e evitar um monte de implantação e dor de cabeça de segurança.

O .NET Framework fornece várias maneiras de se comunicar com objetos em diferentes domínios de aplicação, cada um projetado com um determinado nível de especialização e flexibilidade em mente. Por exemplo, o crescimento da Internet tem feito XML Web Services um método atraente de comunicação, porque os serviços Web XML são construídos sobre a infra-estrutura comum do protocolo HTTP e formatação de SOAP, que utiliza XML. Estes são normas públicas, e pode ser usado imediatamente com infra-estruturas atuais da Web sem se preocupar com proxy adicional ou problemas de firewall.

Nem todos os aplicativos devem ser construídas usando alguma forma de serviço Web XML, no entanto, se só por causa dos problemas de desempenho relacionados ao uso de SOAP serialização através de uma conexão HTTP.

Escolhendo opções de comunicação em .NET ajuda a decidir qual a forma de comunicação entre objetos que você quer para a sua aplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top