Java HTTP Post против .NET WCF - «Несоответствие ContractFilter в EndpointDispatcher» - PullRequest
0 голосов
/ 25 марта 2011

У меня есть служба WCF, к которой один из наших клиентов тоже пытается подключиться, используя Java.Они делают сообщение HTTP, используя следующий XML.

Я получаю сообщение об ошибке, описанное ниже

<?xml version="1.0" encoding="UTF-8"?>
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <env:Header></env:Header>
    <env:Body>
        <req:GetLeads xmlns:req="http://tempuri.org">
            <userName>blah</userName>
            <password>blow</password>
            <startDateTime>2010-09-24T12.01.37</startDateTime>
            <endDateTime>2011-03-25T09.07.41</endDateTime>
        </req:GetLeads>
    </env:Body>
    </env:Envelope>

Сообщение об ошибке

The message with Action 'https://carinsuranceapp.uat.infochoice.com.au/LeadReports.svc/basic' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver.  Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).

Трассировка стека

at System.ServiceModel.Dispatcher.ErrorBehavior.ThrowAndCatch(Exception e, Message message)
          at System.ServiceModel.Dispatcher.ChannelHandler.ReplyFailure(RequestContext request, Message fault, String action, String reason, FaultCode code)
          at System.ServiceModel.Dispatcher.ChannelHandler.ReplyContractFilterDidNotMatch(RequestContext request)
          at System.ServiceModel.Dispatcher.ChannelHandler.EnsureChannelAndEndpoint(RequestContext request)
          at System.ServiceModel.Dispatcher.ChannelHandler.TryRetrievingInstanceContext(RequestContext request)
          at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)
          at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)
          at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke2()
          at System.Security.SecurityContext.Run(SecurityContext securityContext, ContextCallback callback, Object state)
          at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke()
          at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ProcessCallbacks()
          at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.CompletionCallback(Object state)
          at System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
          at System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
          at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

1 Ответ

1 голос
/ 25 марта 2011

Было бы проще точно определить проблему, если вы поделились своим WSDL.

Есть несколько вещей, которые вы могли бы сделать, чтобы выяснить, что происходит.

  • Используйте WCFTestClient.exe для подключения к вашей службе и вызовите метод. Это позволяет вам просматривать полезную нагрузку XML, отправляемую на сервер. Вы можете сравнить это с тем, что отправляет ваш клиент.
  • Настройка трассировки в вашем сервисе - http://msdn.microsoft.com/en-us/library/ms733025.aspx. Это проще сделать с помощью WCFConfigEditor.exe. Вы увидите более подробную информацию о том, что является причиной сбоя, когда вы посмотрите на файл трассировки.

Кстати, ваш клиент отправляет SOAP 1.1. Если это приемлемо в вашем сценарии, вы можете попробовать изменить привязку в вашем сервисе на basicHttpBinding вместо wsHttpBinding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...