Исключение Дистанционной работы.NET

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

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

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

https://jsfiddle.net/5hhu896g/1/

keyboardCharMap and keyboardNameMap are the key to making this work

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

5
задан Bill the Lizard 8 September 2010 в 18:56
поделиться

6 ответов

Получение исключения дистанционной работы не гарантирует, что Ваш сервер в порядке. Если что-то еще, окажется, будет работать и слушать на том порте, то соединение успешно выполнится, и Вы не получите исключительную ситуацию сокета. Что происходит, в этом случае зависит от того, как приложение, которое на самом деле получило Ваше соединение, ведет себя, но оно, вероятно, завершит генерацию исключения дистанционной работы в Вашем клиенте.

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

1
ответ дан 15 December 2019 в 06:38
поделиться

Если Вы намереваетесь использовать пользовательские типы исключительной ситуации, которые будут брошены через границу дистанционной работы, несомненно, отметят эти типы как" [сериализуемые]". Я не могу помнить точное сообщение об ошибке, но оно озадачило меня к лучшему часть дня в первый раз, когда я видел его.

Кроме того, просто подсказка, TargetInvocationException часто встраивали РЕАЛЬНОЕ исключение в его свойство InnerException. Нет ничего более бесполезного, чем "Исключение было выдано целью вызова".

2
ответ дан 15 December 2019 в 06:38
поделиться

Попытайтесь гарантировать, что Вы отправляете корректное сообщение, и сообщения, полученные сервером, также корректны, например, утверждения использования (это называет Дизайном Контракт). Если у Вас есть такая возможность, попытайтесь отладить сторону сервера и сторону клиента одновременно. (выполнение двух экземпляров VS одновременно)

0
ответ дан 15 December 2019 в 06:38
поделиться

У меня нет доступа к исходному коду моего последнего приложения дистанционной работы, но насколько я могу помнить, что мы не могли выяснить способ знать для определенного, если бы сервер возрос с какого-либо из исключений, мы добрались.
Мы действительно проверяли, чтобы видеть, присутствовала ли сеть и предупредила пользователя, если не (метод на классе Среды я думаю).

0
ответ дан 15 December 2019 в 06:38
поделиться

Хорошо теперь, когда Вы поместили его тот путь, я предполагаю, что Вы - использование TCP для дистанционной работы, поскольку, если бы это было через HTTP, это был бы WebException, брошенный при отказе соединиться с (сетевой порт TCP) сервер. Когда сервер не запустит прикладную программу для регистрации канала на том обозначенном порте TCP, Вы получите SocketException. В конце концов, сервер не слушает/отвечает тот порт, как клиент может когда-либо делать сокетное соединение?

Но, если Вы получаете RemotingException, это не должно обязательно означать, что сервер имеет свое надлежащее хорошо работающее приложение Дистанционной работы. Вы могли протестировать путем соединения с неправильным URI на неправильном порте, как порт 80 (IIS).

IMyRemoteObject obj = (IMyRemoteObject) Activator.GetObject(
    typeof(IMyRemoteObject),
    "tcp://localhost:80/MyRemoteObject.rem");

Это привело бы к RemotingException, потому что, в то время как клиент может сделать соединение TCP для портирования 80, это - IIS, отвечающий на вызов а не приложение Дистанционной работы; IIS не может обработать вызовы дистанционной работы непосредственно. Однако RemotingException может также весьма иметь в виду проблему в стороне клиента. Эта статья блога может помочь Вам понять лучше.

http://www.cookcomputing.com/blog/archives/000308.html

0
ответ дан 15 December 2019 в 06:38
поделиться

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

HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel);

IMyRemoteObject obj = (IMyRemoteObject) Activator.GetObject(
    typeof(IMyRemoteObject),
    "http://localhost:1234/MyRemoteObject.soap");
Console.WriteLine("Client.Main(): Reference to rem.obj. acquired");
    int tmp = obj.GetValue();
    Console.WriteLine("Client.Main(): Original server side value: {0}",tmp);
Console.WriteLine("Client.Main(): Will set value to 42");

try
{
    // This method will throw an ApplicationException in the server-side code.
    obj.SetValue(42);
}
catch (Exception ex)
{
    Console.WriteLine("=====");
    Console.WriteLine("Exception type: " + ex.GetType().ToString());
    Console.WriteLine("Message: " + ex.Message);
    Console.WriteLine("Source: " + ex.Source);
    Console.WriteLine("Stack trace: " + ex.StackTrace);
    Console.WriteLine("=====");
}

Можно ожидать исключение, полученное как это

=====
Exception type: System.ApplicationException
Message: testing
Source: Server
Stack trace:
Server stack trace:
   at Server.MyRemoteObject.SetValue(Int32 newval) in i:\projects\remoting.net\ch03\01_singlecallobjects\server\server.cs:line 27
   at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(MethodBase mb, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at General.IMyRemoteObject.SetValue(Int32 newval)
   at Client.Client.Main(String[] args) in i:\projects\remoting.net\ch03\01_singlecallobjects\client\client.cs:line 29
=====

Это должно сказать Вам, что Источник в сервере с отслеживанием стека серверной стороны.

0
ответ дан 15 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: