Как обнаружить подключение WCF без try-catch?
Я использую WCF netNamedPipeBinding
а также wsHttpBinding
, Я хотел бы знать, может ли односторонний метод успешно выполняться без try
это
РЕДАКТИРОВАТЬ Как кто-то заметил, связь может преуспеть в данный момент и в следующий раз. Мне все равно Я просто хочу знать, есть ли у WCF альтернатива try
ING. Есть ли способ проверить, работает ли услуга и доступна ли она?
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) поддерживаются на всех привязках.
Если вы хотите просто определить, является ли вызов односторонней операцией, то вам придется выполнить итерацию операций в описании службы (вы не указываете, является ли это вызовом на стороне клиента или сервера) и посмотреть, является ли операция односторонняя или нет.