Безопасен ли поток SoapHttpClientProtocol?

Я создал прокси-сервер веб-службы с функцией "добавить веб-ссылку" в VS 2008 (C#).

Сгенерированный класс происходит от SoapHttpClientProtocol

Могу ли я хранить только один экземпляр моего прокси в синглтоне? Это потокобезопасно? Есть ли состояние между вызовами, которое помешало бы мне сделать это?

4 ответа

Решение

Нет, это не потокобезопасно. клиент должен быть в открытом состоянии, чтобы разрешить вызовы. Простой сценарий, когда один поток выполняет client.Close(), а другой пытается вызвать метод, завершится неудачей.

MSDN говорит, что SoapHttpClientProtocol является потокобезопасным:

Поток безопасности

Этот тип является потокобезопасным.

Для другого класса, такого как System.Windows.Forms, который не является потокобезопасным, MSDN говорит:

Поток безопасности

Любые открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными. Любые члены экземпляра не гарантированно являются потокобезопасными.


Вот сотрудник Microsoft/MSDN, который говорит (хотя и без гарантии), что он потокобезопасен:

Привет Макс

Для прокси-сервера веб-сервиса, я думаю, он должен быть потокобезопасным, поскольку сгенерированный прокси-класс.NET является производным от класса "SoapHttpClientProtocol", который в документе помечен как потокобезопасный:

Класс SoapHttpClientProtocol

http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol(VS.71).aspx

следовательно, это должно быть безопасно использовать его в многопоточном контексте, если вы не добавили вручную какой-либо контекстно-зависимый член в производный прокси-класс. Ты так думаешь?

С уважением,

Стивен Ченг

Microsoft MSDN Поддержка онлайн-лидер

Эта публикация предоставляется "КАК ЕСТЬ" без каких-либо гарантий и не дает никаких прав.

По этой ссылке: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol.aspx

внизу под надписью "Безопасность потоков" указано, что этот тип безопасен для потоков. Я, однако, не знаю, что использование его в качестве синглтона будет потокобезопасным.

MSDN не упоминает, что это потокобезопасный:

Поток безопасности

Этот тип является потокобезопасным.

Класс безопасен, никаких упоминаний об объекте.

Но можно с уверенностью сказать, что он не является потокобезопасным - ни один объект в библиотеке.NET не является потокобезопасным.

(По крайней мере, я никогда не видел)

Другие вопросы по тегам