found:{}
- это метка в Java, в основном используемая для оператора goto
, но поскольку Java не использует goto
, ее можно использовать для оператора break
и continue
. Вот пример использования метки в Java.
loop:
for (int i = 0; i < 10; i++) {
for(int j=0; j<10; j++)
{
if(j==5)
{
break loop;
}
System.out.println(j);
}
}
Когда j
достигнет 5, произойдет разрыв на внешнюю метку loop
.
Согласитесь с последними ответами, если не получилось, нужно прервать. Для этого мы используем комбинацию лямбда-выражений и метод, подобный следующему:
public static void Use<TServiceInterface>(TServiceInterface proxy, Action handler)
{
Type proxyType = typeof(TServiceInterface);
IClientChannel channel = (IClientChannel)proxy;
try
{
handler();
_logSource.Log(LogLevel.Debug, string.Format("Closing client channel for '{0}' ...", proxyType.Name));
channel.Close();
_logSource.Log(LogLevel.Debug, string.Format("Client channel for '{0}' closed.", proxyType.Name));
}
catch
{
if (channel.State == CommunicationState.Faulted)
{
_logSource.Log(LogLevel.Debug, string.Format("Aborting client channel for '{0}' ...", proxyType.Name));
channel.Abort();
_logSource.Log(LogLevel.Debug, string.Format("Client channel for '{0}' aborted.", proxyType.Name));
}
else
{
_logSource.Log(LogLevel.Debug, string.Format("Closing client channel for '{0}' ...", proxyType.Name));
channel.Close();
_logSource.Log(LogLevel.Debug, string.Format("Client channel for '{0}' closed.", proxyType.Name));
}
throw;
}
}
Это небольшая модификация решения, которое уже есть в .net, но оно отлично подходит для работы с прокси. Затем вы можете поместить несколько вызовов службы в одно и то же лямбда-выражение и передать его в метод.
Это, скорее всего, вызвано необработанным исключением на стороне сервера. По умолчанию среда выполнения WCF завершает работу вашего экземпляра службы и переводит канал в состояние отказа в случае необработанного исключения, и вы больше не можете общаться по этому каналу. Поэтому вам нужно будет установить новый сеанс с сервисом. Вы должны перехватывать исключения на стороне сервера и отправлять мыльные ошибки, вызывая FaultException или определяя FaultContract. Существует также поведение сервиса returnUnknownExceptionsAsFaults, которое вы можете использовать.
По умолчанию среда выполнения WCF завершает работу вашего экземпляра службы и переводит канал в состояние отказа в случае необработанного исключения, и вы больше не можете общаться по этому каналу. Поэтому вам нужно будет установить новый сеанс с сервисом. Вы должны перехватывать исключения на стороне сервера и отправлять мыльные ошибки, вызывая FaultException или определяя FaultContract. Существует также поведение сервиса returnUnknownExceptionsAsFaults, которое вы можете использовать. По умолчанию среда выполнения WCF завершает работу вашего экземпляра службы и переводит канал в состояние отказа в случае необработанного исключения, и вы больше не можете общаться по этому каналу. Поэтому вам нужно будет установить новый сеанс с сервисом. Вы должны перехватывать исключения на стороне сервера и отправлять мыльные ошибки, вызывая FaultException или определяя FaultContract. Существует также поведение сервиса returnUnknownExceptionsAsFaults, которое вы можете использовать.Как только объект ICommunicationObject (ваш клиентский объект WCF) находится в неисправном состоянии, единственный способ «вновь открыть» его является создание нового.
ServiceClient client = new ServiceClient();
try
{
client.Operation1();
}
catch(Exception ex)
{
if (client.State == CommunicationState.Faulted)
{
client.Abort();
client = new ServiceClient();
}
}
try
{
client.Operation2();
}
catch(Exception ex)
{
// Handle Exception
}
:%s/<Ctrl-V><Ctrl-M>/\r/g
Где
означает тип Ctrl + V , затем Ctrl + M .
:%s
подставить,% = все строки
<Ctrl-V><Ctrl-M>
^ M символов (Ctrl-V - это способ записи символа Ctrl ^ в Vim, а Ctrl-M записывает M после регулярного выражения, в результате чего получается ^ M специальный символ)
/\r/
с новой строкой ( \ r
)
g
И сделать это глобально (не только первое вхождение в строке).
В вашем примере я, вероятно, сделал бы что-то вроде:if (client.State == CommunicationState.Faulted)
client = new ServiceClient();
Это позволило бы вам «заново открыть» соединение, если оно повреждено. Это может показаться немного излишним, но если вы получаете коммуникационное исключение на стороне клиента, вероятно, происходит что-то еще (например: сервер мертв? Сервер не отвечает?)
Удачи