Was ist der Unterschied zwischen [OperationContract(IsOneWay = true)], und überprüfen Sie den generierten asynchrone Operationen checkbox?
Was ist der Unterschied zwischen Kennzeichnung eine WCF-Methode mit
[OperationContract(IsOneWay = true)]
Attribut und überprüfung der generieren asynchrone Operationen Markierungsfeld " beim hinzufügen der service Referenz?
Von dem, was ich gelesen habe, scheint es die asynchrone Natur der Aufruf sollte nur definiert werden, auf der client-Seite.
Wenn das der Fall ist, was ist der Punkt, der [OperationContract(IsOneWay = true)]
?
Gerade jetzt, ich habe nur die folgende Methode ausgeführt, die in der WCF-Methode.
public void UpdateIndex(IndexElement[] indexElements)
{
//start the update on a new thread.
Thread thread = new Thread(() => UpdateIndexThread(indexElements));
thread.Start();
}
Erstellte ich eine service-Referenz in meinem client code, und ich einfach anrufen:
indexerClient.UpdateIndex(indexElements);
Wo indexerClient
ist eine Instanz des WCF-Diensts.
Sollte dies auch funktionieren? Es scheint nicht, es ist fast, als ob er wartet, bis der thread abgeschlossen ist, bevor Sie zurückkehren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese sind sehr unterschiedlich.
Auf einer konzeptionellen Ebene, IsOneWay=true sagt, dass die messaging-Muster ist 'fire-and-forget" im Gegensatz zu z.B. "request-response". Das ist, IOW=true bedeutet, dass es ist eine Nachricht, die vom client an den server, aber keine Antwort vom server an den client. Im Gegensatz dazu ein nicht-IOW=true Methode wird in der Regel eine Antwort-Nachricht, auch wenn der Rückgabetyp void ist (z.B. eine 'leer' - Meldung).
Dem async-pattern ist, wie der client-code verhält sich - z.B. macht es block wartet auf den Rückgabewert oder nicht. Async ist ein "lokales" - Ding, siehe dieser blog für details. Sie können einen asynchronen client für einen sync-server oder einen sync-client für eine asynchrone server. WCF wird die Magie unter der Haube zu geben, die Sie entweder Programmier-Modell. Wenn Sie z.B. ein Anfrage-Antwort-messaging-Muster und verwenden Sie "erzeugen async', das erzeugte client geben Sie z.B. eine Methode, die Sie aufrufen können, async (z.B. senden Sie die Nachricht, und erhalten Sie einen Rückruf, wenn die Antwort kommt).
So verwenden Sie 'async' für 'local programming model", und verwenden Sie IOW für "messaging auf dem Draht'.
Beachten Sie, dass in Ihrem Beispiel, wenn Sie markieren Sie die Methode IOW=true, dann denke ich, gibt es keinen Grund für den Thread.Start() in der server-code. Sie können einfach die Arbeit machen, gleich hier auf den thread WCF gegeben hat, Ihre server.