Ошибка при взаимодействии WCF с другим WCF
У меня есть 2 Службы Windows. Каждая служба Windows хостинг WCF сервиса.
ControllerService хосты ControllerWCF
CalcService хосты CalcWCF
В ControllerWCF есть несколько методов, которые пойдут в сторону CalcWCF для обработки некоторых данных. Затем у меня есть третье консольное приложение для тестирования моих сервисов.
Используя третье консольное приложение, чтобы проверить его, я создал 3 соединения.
1-й идет непосредственно к ControllerWCF, который выполняет метод в ControllerWCF
2-й идет непосредственно к CalcWCF, который выполняет метод в CalcWCF
3-й идет непосредственно к ControllerWCF, который выполнит метод в CalcWCF (тот же метод, что и 2-е соединение)
При запуске приложения 1-е и 2-е соединения будут выполняться безупречно. При переходе к 3-му соединению он выйдет из строя и вернет это сообщение об исключении:
An existing connection was forcibly closed by the remote host
System.ServiceModel.Channels.SocketConnection.HandleReceiveAsyncCompleted() System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(Object sender, SocketAsyncEventArgs eventArgs) System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e) System.Net.Sockets.SocketAsyncEventArgs.FinishOperationAsyncFailure(SocketError socketError, Int32 bytesTransferred, SocketFlags flags) System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
Также появилось это сообщение об ошибке в средстве просмотра трассировки службы
The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '10675199.02:48:05.4775807'.
- $exception {"The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:57.2419783'."} System.ServiceModel.CommunicationException
SocketException: An existing connection was forcibly closed by the remote host
Соединение с розеткой было прервано. Это может быть вызвано ошибкой обработки Вашего сообщения, превышением тайм-аута приема удаленным хостом или основной проблемой с сетевыми ресурсами. Местные таймаут на сокете '00:00:59.9989991'.
Что я уже пробовал:
Я активировал трассировку службы, увеличил время ожидания, maxItemsInObjectGraph и т. д.
Я до сих пор не знаю, как решить эту проблему. Скоро я вставлю свой файл app. config из всех служб WCF.
F-ES Sitecore
Проверьте, что в конфигурации ControllerWCF есть правильные данные для службы CalcWCF, то есть правильный uri\host\port и т. д. Возможно, добавьте некоторое ведение журнала в ControllerWCF, чтобы точно записать, какие URI он собирается вызвать.
GuilhermeCoollink
Когда CalcService запускается и размещает CalcWCF, Uri CalcWCF хранится в базе данных. ControllerWCF использует ControllerService, чтобы получить URI для CalcWCF. Я начал печатать материал на консоль, чтобы убедиться, что он извлекает правильный Uri, и там все гладко :/
F-ES Sitecore
Попробуйте проследить за скрипачом, чтобы узнать, может ли это дать вам больше информации.
GuilhermeCoollink
Попробую проследить за скрипачом. На этом экране отображаются выходные данные, поступающие из обеих служб, а также из консоли тестирования http://imgur.com/ll97JBe
GuilhermeCoollink
Просто заметил, что он не работает с net.tcp только с http. Скрипач тогда никуда не годится :x