2016-10-20 2 views
2

У меня есть приложение BizTalk 2013r2, у которого есть порт отправки ответа на запрос с использованием адаптера WCF-WebHttp. Порт отправки использует пользовательское поведение WCF, которое я разработал для присоединения заголовка авторизации OAuth, подробности которого можно увидеть here. Все отлично работает при работе с моим Azure dev vm, но я только что запустил его в первый раз на сервере BizTalk on-prem, где ему нужно будет работать с того момента, когда вы живете, я попал в проблему!Вызов BizTalk REST работает только при запуске Fiddler

Регулируя настройки на вкладке «Прокси» страницы конфигурации портового адаптера отправить, я пробовал сценарии:

  • через корпоративный прокси-сервер - не откажет
  • Direct к веб-службе целевой, нет прокси - несоответствие
  • Через скрипача - работает
  • Для местного макете службы (организовано SoapUI) - работает

, если Запрос осуществляется через корпоративный прокси-сервер или прямой (сетевое правило было создано, чтобы позволить этому), то я получаю EndpointNotFound исключения

При запуске WCF следа от неудачного запроса, я получаю следующее сообщение «Message Log трассировки» :

enter image description here

Круги вскоре после того, как с помощью:

enter image description here

Secon d, похоже, совпадает с первым, за исключением того, что добавлен элемент Адресация с пустым элементом Action. Я вижу, что второй - это журнал с источником = TransportSend, тогда как первый имеет источник = ServiceLevelSendRequest. Сразу же после второй журнал я вижу исключение:

<ExceptionType>System.ServiceModel.EndpointNotFoundException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
<Message>There was no endpoint listening at https://api-sandbox.tradeshift.com/tradeshift/rest/external/documents/dispatcher/?documentId=66553703-4f22-4294-9a28-1f3ecb22fcf2&documentProfileId=tradeshift.order.1.0 that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.</Message> 
<StackTrace> 
at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStreamAsyncResult.CompleteGetRequestStream(IAsyncResult result) 
at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStreamAsyncResult.OnGetRequestStream(IAsyncResult result) 
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
at System.Net.LazyAsyncResult.Complete(IntPtr userToken) 
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Net.ContextAwareResult.Complete(IntPtr userToken) 
at System.Net.HttpWebRequest.SetResponse(Exception E) 
at System.Net.ConnectionReturnResult.SetResponses(ConnectionReturnResult returnResult) 
at System.Net.Connection.CompleteConnectionWrapper(Object request, Object state) 
at System.Net.PooledStream.ConnectionCallback(Object owningObject, Exception e, Socket socket, IPAddress address) 
at System.Net.ServicePoint.ConnectSocketCallback(IAsyncResult asyncResult) 
at System.Net.LazyAsyncResult.Complete(IntPtr userToken) 
at System.Net.ContextAwareResult.Complete(IntPtr userToken) 
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
</StackTrace> 

Где сделать запрос через Fiddler я вижу два одинаковых исходящих журналов, один для ServiceLevelSendRequest и один для TransportSend. Затем я вижу TransportReceive следует ServiceLevelReceiveReply, как содержащий HttpResponse элемент

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

+0

Имеет ли запрос через Скрипач Адресацию? – Dijkgraaf

+0

Извините, Колин, мой пост не был большим - надеюсь, мое редактирование прояснилось? –

+0

Работает ли это, если вы пытаетесь попасть в локальную конечную точку? Как внутренний, нет прокси вообще? –

ответ

1

Утром сегодня утром с инженером локальной сети, который смог запустить трассировку на корпоративном прокси. Мы провели эти тесты:

  1. послал тщательный скрипач - он работал, могли видеть, что скрипач был маршрутизаций через корпоративный прокси
  2. закрытой стельки, повторен тест - это не удалось, но инженер не мог видеть никаких следов
  3. FACEPALM! Я понял, что у меня все еще есть прокси-сервер send port, равный 127.0.0.1: 8888 для скрипача
  4. изменил порт отправки, чтобы использовать корпоративный прокси - это сработало!

Инженер заметил, что целевой IP-адрес, возвращаемый из api-sandbox.tradeshift.com, не изменился. Таким образом, кажется, что это балансировка нагрузки на их стороне. У нашего корпоративного брандмауэра не было адресов для каждого из их серверов, поэтому, возможно, это может объяснить, почему я не мог заставить BizTalk работать через наш прокси-сервер на прошлой неделе.

Смежные вопросы