Ну, для краткого ответа это потокобезопасно, да. Причина в том, что на стороне сервера службы будет больше информации, чем о клиентских подключениях, о возможностях потоков. Клиент - это просто прокси, который выкладывает запрос так, чтобы сервер мог его понять. Ничего не знает Это базовый класс, нет внешнего доступа, кроме подключения к серверу. Так что, пока сервер допускает несколько соединений, у вас все будет в порядке. Таким образом, нет конфликта ресурсов (за исключением того, что сервер может обрабатывать все ваши запросы).
На стороне клиента вы можете иметь несколько потоков, использующих один и тот же класс, но разные экземпляры. Это, вероятно, будет предпочтительным сценарием, так что каждая транзакция может быть атомарной. В то время как совместно используемый экземпляр вам придется обрабатывать собственный поток, блокирующий доступ самого класса, в противном случае вы можете столкнуться с состоянием гонки на внутреннем ресурсе вашего кода.
Существует также возможность асинхронного вызова. Заглушки, сгенерированные утилитой wsdl, создадут методы start, end invoke, чтобы вы могли предоставить метод обратного вызова, чтобы эффективно позволить вам отправить запрос и продолжить код, не ожидая ответа. Это, вероятно, будет лучшим для вашего второго сценария с одним экземпляром.
Однако это также зависит от того, как кодируется серверный компонент. Если это веб-сервис, вы должны иметь возможность отправлять несколько запросов одновременно. Однако, если это сервис на основе сокетов, вам может потребоваться выполнить дополнительное кодирование на своем конце, чтобы обрабатывать несколько входящих соединений или даже создавать сокеты, например.
Короче говоря, да, разные экземпляры ведут себя так же, как однопотоковое выполнение, в пределах возможности серверной стороны обрабатывать несколько одновременных соединений.
Что касается единственного экземпляра, если вы используете процесс обратного вызова, который предоставляется, вы можете получить то, что вам нужно, без особой головной боли. Однако это также ограничено пределами кода на стороне сервера.
Причина, по которой я утверждаю ограничения сервера, заключается в том, что есть компании, которые будут создавать веб-службы, которые ограничивают количество подключений, исходящих от исходящих хостов, поэтому ваша пропускная способность ограничена этим. Таким образом, количество эффективных потоков, которые вы могли бы использовать, было бы уменьшено или устарело.