我正在嘗試在與第三方應用程序通信的wcf服務中託管TCP客戶端連接。 WCF服務將tcp調用包裝到第三方應用程序,以便連接到WCF服務的任何應用程序都不知道TCP連接。由於第三方應用程序需要的協議,tcp連接必須保持活動狀態。我已經實現了處理錯誤和重新連接的邏輯,但是我遇到的問題是如何打開和關閉此連接。有沒有辦法讓我重寫主機打開和關閉的呼叫,以便我可以對我的CommunicationService做同樣的事情?TCP Keep Alive連接託管在WCF中
我的代碼:
public partial class HostService : ServiceBase
{
private ServiceHost _host;
public HostService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Type serviceType = typeof(MessageProcessor);
var serviceUri = new Uri("http://localhost:9091/");
_host = new ServiceHost(serviceType, serviceUri);
_host.Open();
}
protected override void OnStop()
{
_host.Close();
}
}
[ServiceContract]
public interface IMessageProcessor
{
[OperationContract]
void ProcessMessage(string message);
}
public class MessageProcessor : IMessageProcessor
{
//This is handling my TCP connection.
private CommunicationService _communicationService;
public MessageProcessor()
{
_communicationService = new CommunicationService();
}
public void ProcessMessage(string message)
{
if(_communicationService.Connected)
{
var request = new QueryMessage();
var result = _communicationService.TransmitMessage(request);
}
else
{
//Error handling, not necessary for now
}
}
//I want to do this
public override Open()
{
_communicationService.Open();
}
public override Close()
{
_communicationService.Close();
}
}
當兩個客戶端(因此兩個線程)試圖同時調用您的ProcessMessage方法(原則上是您的TCP連接)時,您會發生什麼? – 2012-03-27 14:42:12
你使用什麼InstanceContextMode來爲你的服務?這將大大決定MessageProcessor的生命週期和潛在多個實例。 – GazTheDestroyer 2012-03-27 15:06:01
KirkWoll,我的通信類中有邏輯來處理多線程。我排隊消息並根據其類型給予優先級。 GazTheDestroyer,恐怕我不確定你指的是什麼,這是我第一次使用WCF。我在做什麼不理想?有一個更好的方法嗎? – jtiger 2012-03-27 17:13:18