WCF: How can I send data while gracefully closing a connection?
- by mafutrct
I've got a WCF service that offers a Login method. A client is required to call this method (due to it being the only IsInitiating=true). This method should return a string that describes the success of the call in any case. If the login failed, the connection should be closed.
The issue is with the timing of the close. I'd like to send the return value, then immediately close the connection.
string Login (string name, string pass)
{
if (name != pass) {
OperationContext.Current.Channel.Close ();
return "fail";
}
else {
return "yay";
}
}
The MSDN states that calling Close on the channel
causes an ICommunicationObject to
gracefully transition from the Opened
state to the Closed state. The Close
method allows any unfinished work to
be completed before returning. For
example, finish sending any buffered
messages).
This did not work for me (or my understanding is wrong), as the close is executed immediately - WCF does not wait for the Login method to finish executing and return a string but closes the connection earlier.
Therefore I assume that calling Close does not wait for the running method to finish. Now, how can I still return a value, then close?