Безопасен ли поток SoapHttpClientProtocol? - PullRequest
9 голосов
/ 17 декабря 2009

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

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

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

Ответы [ 4 ]

10 голосов
/ 10 января 2014

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

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

2 голосов
/ 18 декабря 2009

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

1 голос
/ 17 декабря 2009

MSDN не упоминает , что он безопасен для потоков:

Безопасность потока

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

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

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

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

1 голос
/ 17 декабря 2009

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

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

...