Как обнаружить подключение WCF без try-catch? - PullRequest
1 голос
/ 24 февраля 2011

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

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

Ответы [ 3 ]

5 голосов
/ 24 февраля 2011

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

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

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

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

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

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

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

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

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

4 голосов
/ 24 февраля 2011

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

2 голосов
/ 24 февраля 2011

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

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

...