После тестирования различных привязок и возврата к основам я заметил, что примеры программ работают, но моя не работает, если я не использую Visual Studio для отладки. В тот момент я решил, что это должно быть что-то, что происходит с моим собственным кодом. Чтобы упростить отладку, я отключил все средства защиты в привязке.
Я начал комментировать большинство операторов в методе OnStart моего сервиса, чтобы определить, что может происходить. Я закомментировал все, кроме кода, который инициализирует ServiceHost. Волшебным образом мой клиент теперь мог успешно общаться с сервисом. Затем я начал раскомментировать каждую строку кода в методе OnStart, пока мой клиент вдруг снова не начал выдавать мне TimeoutException.
Мой класс обслуживания, скажем, «MyAPI», реализует контракт «IMyAPI». Наряду с использованием класса «MyAPI» в качестве службы WCF, я также использовал экземпляр класса «MyAPI» внутри своей службы для выполнения различных задач («внутренних» методов). В моем методе OnStart я сначала создал экземпляр класса «MyAPI», а затем создал ServiceHost:
MyAPI API = new MyAPI();
ServiceHost service = new ServiceHost(typeof(MyAPI));
Я не получал никаких ошибок или исключений, так что оказалось, что все в порядке, но на самом деле я не смог подключиться к сервису с помощью клиента. Как только я изменил порядок вышеприведенных утверждений, клиент снова начал работать:
ServiceHost service = new ServiceHost(typeof(MyAPI));
MyAPI API = new MyAPI();
Я не уверен, ПОЧЕМУ это происходит, все, что я знаю, - это то, что я могу использовать свой API внутри и в качестве службы без каких-либо проблем с подключением клиента. Может быть, кто-то прояснит причины этого, или, возможно, мой код разработан неправильно.