Вызов WCF зависает на устройстве WCE, когда WLAN не имеет действительного IP - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть некоторые устройства Pocket PC 4.2, которые обмениваются данными с сервером по беспроводной сети, используя WiFi через WCF.Все работает хорошо, пока беспроводная сеть не может подключиться к точке доступа и получить адрес DHCP (IP на адаптере - 0.0.0.0).В этот момент любые вызовы WCF на сервер никогда не вернутся.Если я назначаю статический IP-адрес беспроводному интерфейсу, эта проблема не возникает.

Ниже приведен соответствующий код, созданный программой NetCFSvcUtil.exe.Вызов Request () никогда не вернется.Если сетевой адаптер имеет действительный IP-адрес, а сервер не работает, время ожидания соединения истекает, как и ожидалось.Я попытался добавить параметр тайм-аута к вызову Request (), но безрезультатно.

Я могу установить устройства со статическими IP-адресами или определить, является ли IP-адрес недействительным, перед попыткой вызова WCF, но я хотел бы лучшеРешение, если возможно, спасибо!

private System.ServiceModel.Channels.Message getReply(System.ServiceModel.Channels.Message msg)
    {
        if ((this.RequestChannelFactory == null))
        {
            // transport doesn't support requests
            throw new System.NotSupportedException();
        }
        System.ServiceModel.Channels.IRequestChannel requestChannel;
        System.Threading.Monitor.Enter(this.RequestChannelFactory);
        try
        {
            requestChannel = this.RequestChannelFactory.CreateChannel(this.remoteAddress);
        }
        finally
        {
            System.Threading.Monitor.Exit(this.RequestChannelFactory);
        }
        requestChannel.Open();
        try
        {
            return requestChannel.Request(msg);
        }
        finally
        {
            if ((requestChannel.State == System.ServiceModel.CommunicationState.Opened))
            {
                requestChannel.Close();
            }
        }
    }
...