Aktualnie pracuję nad projektem, w którym muszę zarządzać aplikacją za pomocą klienta wcf. Problem, przed którym stoję, polega na tym, że po wykonaniu połączenia z serwerem potrzebuję, aby klient oczekiwał na wywołanie zwrotne. Oto scenariusz:Spraw, aby klient wcf czekał na oddzwonienie
Wykonuję połączenie z usługą, która pokazuje okno, a następnie aplikacja serwera jest bezczynna. Kiedy klikam przycisk w oknie, wywołuje ono oddzwanianie do klienta. w tym czasie interfejs użytkownika klienta musi być wyłączony - musi czekać na oddzwonienie. Czy możesz mi powiedzieć, jak mogę to osiągnąć? Czy ma coś wspólnego z trybem współbieżności lub atrybutem kontraktu operacyjnego?
To jest mój kod na ServiceContract i CallbackContract:
[ServiceContract(CallbackContract = typeof(IWCFServiceCallback))]
public interface IWCFService
{
[OperationContract]
void OpenWindow();
}
public interface IWCFServiceCallback
{
[OperationContract(IsOneWay = true)]
void ReturnValue(object[] value);
}
Dzięki za odpowiedź. Dodam tylko, że po wywołaniu metody chcę, aby klient działał tak samo, jak gdyby sama metoda zwracała wartość (bez wywołania zwrotnego) - klient czeka, aż usługa zakończy pracę i zwróci wartość. Nie mogę zablokować interfejsu użytkownika ręcznie, ponieważ klient jest dodatkiem Excel, który nie ma formularzy/okien, które mógłbym wyłączyć. – Bartek
Wywołanie usługi jest wykonywane, gdy program Excel ma otwarty interfejs FunctionWizard, więc nie mogę po prostu zablokować komórek, ponieważ powoduje to awarię programu Excel. – Bartek
@Bartek - To inny problem niż oddzielne pytania i odpowiedzi. Uważam, że dostarczyłem odpowiedź na to pytanie, ale jeśli nie, daj mi znać, a postaram się pomóc. FYI zauważ, że Microsoft w swoim przykładowym kodzie tutaj zboczył z własnych [zalecanych konwencji nazewnictwa] (https://msdn.microsoft.com/en-us/library/mt674882.aspx#Anchor_7). Funkcje asynchroniczne powinny mieć dołączone "Asynchroniczne" do ich nazw. To prawda, że nie widzimy tutaj słowa kluczowego 'async', ale jest to architektura asynchroniczna. – InteXX