Monotouch: услуги WCF и обработка исключений - PullRequest
6 голосов
/ 30 марта 2011

Я использую службу WCF, созданную с помощью Visual Studio.

Я выполняю вызов, такой как GetDataAsync (param), для извлечения данных.В обработчике GetDataCompleted я использую восстановленные данные.

Служба работает.Иногда я не могу получить данные.В этом случае произошло исключение, подобное следующему:

Exception in async operation: System.Net.ProtocolViolationException: The number of bytes to be written is greater than the specified ContentLength.
  at System.Net.WebConnectionStream.CheckWriteOverflow (Int64 contentLength, Int64 totalWritten, Int64 size) [0x00038] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebConnectionStream.cs:546 

Как можно поймать подобное исключение?Приложение все еще работает, но исключение выводится на консоль.Я думаю, что исключение исходит от Channel или чего-то еще.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Ваш вопрос:

Как можно поймать похожее исключение (красный: ProtocolViolationException)?

В вашем сервисном приложении перехватите ProtocolViolationException со следующим кодом:

catch (ProtocolViolationException ex)
{
  // do something with your exception here
  // for example, throw a FaultException that will be communicated to the client
  throw new FaultException<ProtocolViolationException> 
        (ex, new FaultReason(ex.Message), new FaultCode("Sender")); 
}

Для правильной отправки клиенту вам необходимо установить дополнительный атрибут в договоре операции, например:

[OperationContract()] 
[FaultContract(typeof(ProtocolViolationException))] 

И затем на стороне клиента вы можете предвидеть это конкретное исключение и обрабатывать его изящно, например:

catch (FaultException<ProtocolViolationException> ex) 
{ 
    Console.WriteLine("FaultException<>: " + ex.Detail.GetType().Name + " - " + ex.Detail.Message); 
} 

Это отвечает на ваш вопрос?

2 голосов
/ 28 сентября 2011

К сожалению, эти исключения WCF в настоящее время не могут быть обнаружены в Monotouch. Это похоже на известную ошибку. См. MonoTouch - службы WCF, созданные с помощью инструмента Silverlight. Не удается поймать исключения

0 голосов
/ 07 июня 2011

При использовании WCF всегда хорошо стараться получить как можно больше видимости.Есть два инструмента, которые я часто использую.Это WCF Trace Viewer и WCF Config Editor

  • SvcConfigEditor.exe
  • SvcTraceViewer.exe

В зависимости от того, используете ли вы компьютер x64 или x84и версия .Net они должны быть расположены либо.

  • C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \
  • C: \ Program Files \Microsoft SDKs \ Windows \ v7.0A \ bin \
  • C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v6.0A \ Bin
  • C: \ Program Files (x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin Check

Check http://merbla.blogspot.com/2009/02/wcf-tools.html

...