Вызов Close() в блоках прокси-службы после одностороннего вызова WCF
У меня есть простая служба Fire and Forget, которая работает нормально и не блокируется. Однако, когда я пытаюсь закрыть прокси-сервер службы, он блокируется, пока односторонний вызов не завершится. Это ожидаемое поведение?
Код клиента:
var serviceProxy = new MyServiceProxy();
serviceProxy.OneWayCall();
serviceProxy.Close(); // This blocks until OneWayCall() is finished.
Обслуживание:
[ServiceContract]
public interface IMyService {
[OperationContract(IsOneWay = true)]
void OneWayCall();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MyService : IMyService {
public void OneWayCall() {
// Stuff and things
}
}
2 ответа
Решение
Да - в зависимости от привязки / конфигурации, используемой вашей службой, и от того, используете ли вы сеансы каким-либо образом. См. Ссылку ниже для получения информации о конфигурациях, которые приводят к блокировке:
WCF Best Practice # 5: односторонний путь не всегда действительно односторонний
надеюсь, это поможет
Ради полноты; Вот что Microsoft говорит об этом поведении: