Как обнаружить подключение WCF без try-catch?

Я использую WCF netNamedPipeBinding а также wsHttpBinding, Я хотел бы знать, может ли односторонний метод успешно выполняться без tryэто

РЕДАКТИРОВАТЬ Как кто-то заметил, связь может преуспеть в данный момент и в следующий раз. Мне все равно Я просто хочу знать, есть ли у WCF альтернатива tryING. Есть ли способ проверить, работает ли услуга и доступна ли она?

3 ответа

Решение

Насколько мне известно, единственный способ определить, успешно ли выполняется односторонний метод, - генерировать ли он исключение.

Если метод НЕ ДОЛЖЕН быть односторонним, вы можете вернуть логическое значение, в котором указывается, был или нет метод успешным или нет.

Могу я спросить, почему вы пытаетесь это сделать? Без перехвата исключения в методе невозможно определить условия ошибки, если исключение действительно произошло.

Если я неправильно понимаю, как вы "пытаетесь" использовать его, и вы имеете в виду, что на самом деле не выполняете метод, вы можете написать прокси для метода, который фактически не выполняет действие, а только выполняет этап обработки.

Если вы делаете это исключительно для целей тестирования, я бы рекомендовал воспользоваться преимуществами модульных тестов Visual Studio или подключить ваш проект к NUnit.

Пожалуйста, предоставьте более подробную информацию о том, что вы пытаетесь сделать, если один из пунктов выше не ответил на ваш вопрос.

РЕДАКТИРОВАТЬ: Изменено для учета уточнения по Asker.

using(YourService svc = new YourService()){
    if(svc.State.Equals(!CommunicationState.Opened)){ /*Handle Error*/ } 
    svc.InnerChannel.Faulted += new EventHandler(YourFaultedEventHander); 
}

Покроет вас, чтобы увидеть, открыто ли соединение в данный момент, и уведомит вас, если / когда служба перейдет в состояние отказа. Это упреждающе сообщит вам, будет ли вызов успешным. Тем не менее, существуют условия, которые могут привести к сбою этого конкретного метода. Это будет уведомлять вас, только если вы можете успешно вызвать метод обслуживания.

Что произойдет, если вы протестируете вызов, он пройдет, затем каким-то образом соединение будет сброшено, и ваш следующий блок кода не будет выполнен? Тебе лучше tryзатем обрабатывает ошибку, если / когда она появляется.

Нет никакого способа узнать, будет ли гарантированно успешным вызов односторонней операции; односторонние операции (AFAIK) поддерживаются на всех привязках.

Если вы хотите просто определить, является ли вызов односторонней операцией, то вам придется выполнить итерацию операций в описании службы (вы не указываете, является ли это вызовом на стороне клиента или сервера) и посмотреть, является ли операция односторонняя или нет.

Другие вопросы по тегам