Как проверить, что служба TCP TCP wcf подключена - PullRequest
0 голосов
/ 30 марта 2019

Команда для проверки работоспособности службы Windows TCP TCP wcf?

Я пытался использовать прокси для wcf и получал исключение тайм-аута при вызове контракта.Поэтому невозможно подтвердить, работает ли служба или нет

1 Ответ

0 голосов
/ 01 апреля 2019

Следующими способами можно достичь желаемого.
1. Используйте команду Netstat windows, чтобы проверить, прослушивает ли порт протокол TCP.
Например, проверьте, прослушивает ли порт 1900 через TCP. netstat https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/netstat
2. Уведомление OnlineAnnouncement / offlineAnnouncement с использованием конечной точки обнаружения UDP. Когда сервер подключен к сети, он может отправлять онлайн-уведомления с использованием конечной точки обнаружения UDP. Я сделал пример, желаю, чтобы это было полезно для вас.
Сервер.

class Program
    {
        static void Main(string[] args)
        {
            Uri uri = new Uri("net.tcp://localhost:1900");
            NetTcpBinding binding = new NetTcpBinding();
            using (ServiceHost sh=new ServiceHost(typeof(MyService),uri))
            {
                sh.AddServiceEndpoint(typeof(IService), binding, "");
                ServiceMetadataBehavior smb;
                smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
                if (smb == null)
                {
                    smb = new ServiceMetadataBehavior()
                    {
                    };
                    sh.Description.Behaviors.Add(smb);
                }
                ServiceDiscoveryBehavior sdb = new ServiceDiscoveryBehavior();
                sdb.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
                sh.Description.Behaviors.Add(sdb);
                sh.AddServiceEndpoint(new UdpDiscoveryEndpoint());

                Binding binding1 = MetadataExchangeBindings.CreateMexTcpBinding();
                sh.AddServiceEndpoint(typeof(IMetadataExchange), binding1, "mex");
                sh.Open();
                Console.WriteLine("Service is ready...");

                Console.ReadLine();
                sh.Close();
            }

        }
    }
    [ServiceContract(Namespace ="mydomain")]
    public interface IService
    {
        [OperationContract(Name ="AddInt")]
        int Add(int x, int y);

    }
    public class MyService : IService
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
}

Клиент.

  static void Main(string[] args)
    {

        Console.Title = "Start client first";

        AnnouncementService annsvc = new AnnouncementService();
        annsvc.OnlineAnnouncementReceived += OnlineRec;
        annsvc.OfflineAnnouncementReceived += OfflineRec;
        using (ServiceHost host = new ServiceHost(annsvc))
        {
            host.AddServiceEndpoint(new UdpAnnouncementEndpoint());
            host.Open();
            Console.Read();
        }
    }

    private static void OfflineRec(object sender, AnnouncementEventArgs e)
    {
        Console.WriteLine($"\nService is offline, service address:{e.EndpointDiscoveryMetadata.Address.Uri}");
    }

    private static void OnlineRec(object sender, AnnouncementEventArgs e)
    {
        Console.WriteLine($"\nService is online, service address:{e.EndpointDiscoveryMetadata.Address.Uri}");
    }

Result.
UdpDiscoveryEndpoint
Официальный документ.
https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/dd483353(v=vs.100)
На самом деле, мы можем получить статус сервиса по адресу метаданных сервиса. для приведенного выше примера мы могли бы определить состояние службы, введя net.tcp: // localhost: 1900 / mex в диалоговом окне Добавление ссылки на службу.
enter image description here
3. Используйте блокнот для регистрации статуса. Пожалуйста, обратитесь к моему примеру.

Uri uri = new Uri("http://localhost:1000");
BasicHttpBinding binding = new BasicHttpBinding();
ServiceHost sh = null;

protected override void OnStart(string[] args)
{
    sh = new ServiceHost(typeof(MyService), uri);
    ServiceMetadataBehavior smb;
    smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
    if (smb==null)
    {
        smb = new ServiceMetadataBehavior
        {
            HttpGetEnabled = true
        };
        sh.Description.Behaviors.Add(smb);
    }
    sh.Open();
    WriteLog($"Service is ready at {DateTime.Now.ToString("hh-mm-ss")}");
}

protected override void OnStop()
{
    if (sh!=null&&sh.State==CommunicationState.Opened)
    {
        sh.Close();
        WriteLog($"Service is closed at {DateTime.Now.ToString("hh-mm-ss")}");
    }
}
public static void WriteLog(string text)
{
    using (StreamWriter sw=File.AppendText(@"D:\log.txt"))
    {
        sw.WriteLine(text);
        sw.Flush();
    }
}

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...