2009-12-17 14 views
8

Ich habe einen Web-Service-Proxy mit der Funktion "Web-Referenz hinzufügen" von VS 2008 (C#) erstellt.Ist SoapHttpClientProtocol Thread sicher?

Die generierte Klasse leitet sich von SoapHttpClientProtocol

Kann ich nur eine Instanz von meinem Proxy in einem Singleton? Ist es threadsicher? Gibt es einen Zustand zwischen Anrufen, der mich daran hindern würde?

+0

ASMX ist eine Legacy-Technologie und sollte nicht für Neuentwicklungen verwendet werden. Die WCF- oder ASP.NET-Web-API sollte für alle Neuentwicklungen von Web-Service-Clients und -Servern verwendet werden. Ein Hinweis: Microsoft hat das [ASMX Forum] (http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads) auf MSDN zurückgezogen. –

Antwort

2

Nein, es ist nicht Thread-sicher. Der Client muss sich im Status "Offen" befinden, um Anrufe zu ermöglichen. Ein einfaches Szenario, in dem ein Thread client.Close() ausführt, während ein anderer versucht, eine Methode aufzurufen, schlägt fehl.

+1

Diese Klasse hat keine Close-Methode und hat nicht mindestens seit v3.0. Siehe ChrisWs Antwort. –

+0

@RiverSatya - die Antwort wurde gepostet vor 8 Jahren –

+0

Ja, und es ist veraltet. Da es die akzeptierte Antwort ist, habe ich einen Zeiger auf einen aktuelleren eingefügt. –

1

MSDN makes no mention, dass es Thread-sicher ist:

Thema Sicherheit

Dieser Typ ist sicher Faden.

Die Klasse ist sicher, keine Erwähnung des Objekts.

Aber es ist sicher zu sagen, dass es nicht Thread sicher ist - kein Objekt in der .NET-Bibliothek ist threadsicher.

(zumindest ich habe noch nie einen gesehen)

+1

In der Regel für Nicht-Thread-Safe-Typen wäre der Wortlaut "Alle Klassenmitglieder sind garantiert thread-safe. Alle Instanzmitglieder sind nicht garantiert thread-safe." also würde ich annehmen, dass "dieser Typ Thread-sicher ist" sowohl Klassen- als auch Instanzmitglieder einschließt. – Joey

+0

ok Ich bin verwirrt ... vielleicht wäre eine bessere Frage gewesen: "Erzeugt eine Instanz des Web-Service-Proxy für jeden Aufruf einer Web-Methode einen Performance-Downer?" : P –

+0

ich nehme an, mit "type" meinen sie nur den Typ (es ist Typinformation), im Gegensatz zu statischen Klassenmitgliedern oder Instanzmitgliedern, die nicht threadsicher sind. –

10

MSDN sagt, dass SoapHttpClientProtocol Thread-sicher ist:

Thema Sicherheit

Diese Art Thread-sicher ist.

Für eine andere Klasse wie System.Windows.Forms die nicht-Thread-sicher, sagt MSDN,

Thema Sicherheit

Alle öffentlichen static (Shared in Visual Basic) Member dieses Typs sind Gewinde sicher. Alle Instanzmitglieder sind nicht garantiert, Thread sicher zu sein.


Here is a Microsoft/MSDN employee sagen (wenn auch ohne Gewähr), dass es Thread-sicher:

Hallo Max,

für die Webservice-Proxy, ich denke, es Thread-sicher sein sollte als das .NET erzeugten Proxy-Klasse von der „Soaphttpclientprotocol“ Klasse abgeleitet ist, die als threadsicher in Dokument markiert ist:

Soaphttpclientprotocol Klasse

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

daher sollte es sicher, dass es in mehreren zu verwenden, -thread-Kontext so lang , da Sie manuell kein kontextabhängiges Element in der abgeleiteten -Proxyklasse hinzufügen. Denkst du so? Mit freundlichen Grüßen

,

Steven Cheng

Microsoft MSDN Online Support Blei

Dieser Beitrag wird "AS IS" ohne Garantie und keine Rechte verleiht.

+0

-1: Sie diskutieren eine Legacy-Technologie und verknüpfen Sie mit einem Artikel aus .NET 1.1. –

+2

Der erste Link, den ich gab, ist der aktuellen (.NET 4.5) Dokumentation für die Klasse: die immer noch sagt, dass es Thread-sicher ist. Der letzte Link, den ich gab, ist ein direktes Zitat aus einem alten Forum-Post von einem MSFT-Angestellten (um zu bestätigen, wie die MSDN-Dokumentation verstanden werden sollte). – ChrisW

+0

Keine dieser Aussagen widerspricht dem, was ich gesagt habe. –