2015-04-29 8 views
0

Я практикуя учебник здесь - Invoking REST Interface using BizTalk ServerПодавляя глаголы в исходящее сообщение в WCF-WebHttp Транспорт

В этой странице, шаг 3 (е) указывает на то, чтобы обеспечить GET, как глагол быть подавлено в исходящем сообщении для имущества - Suppress Body for Verbs. Объяснение этому мне не понятно.

В качестве эксперимента я удалил глагол GET и сбросил входной файл. Приложение было приостановлено со следующей погрешностью:

System.Net.ProtocolViolationException: Cannot send a content-body with this verb-type. 

Server stack trace: 
at System.Net.HttpWebRequest.CheckProtocol(Boolean onRequestStream) 
at System.Net.HttpWebRequest.BeginGetRequestStream(AsyncCallback callback, Object state) 
at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStreamAsyncResult..ctor(HttpWebRequest httpWebRequest, HttpOutput httpOutput, AsyncCallback callback, Object state) 
at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.BeginGetOutputStream(AsyncCallback callback, Object state) 
at System.ServiceModel.Channels.HttpOutput.SendAsyncResult.SendWithoutChannelBindingToken() 
at System.ServiceModel.Channels.HttpOutput.SendAsyncResult.Send() 
at System.ServiceModel.Channels.HttpOutput.SendAsyncResult..ctor(HttpOutput httpOutput, HttpResponseMessage httpResponseMessage, Boolean suppressEntityBody, TimeSpan timeout, AsyncCallback callback, Object state) 
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.StartSend(Boolean completedSynchronously) 
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.Begin() 
at System.ServiceModel.Channels.ServiceChannel.BeginCall(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, TimeSpan timeout, AsyncCallback callback, Object asyncState) 
at System.ServiceModel.Channels.ServiceChannel.BeginRequest(Message message, TimeSpan timeout, AsyncCallback callback, Object state) 
at System.ServiceModel.Channels.ServiceChannel.BeginRequest(Message message, AsyncCallback callback, Object state) 

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 System.ServiceModel.Channels.IRequestChannel.BeginRequest(Message message, AsyncCallback callback, Object state) 
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.SendRequestMessage(IBaseMessage bizTalkMessage, IRequestChannel channel) 
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.SendMessage(IBaseMessage bizTalkMessage) 
MessageId: {9FA7042A-0391-4AAF-946F-FE9C5516ABFD} 
InstanceID: {4C29E43D-278A-4615-8A30-4ED1B1CBC2AD} 

Почему это необходимо и что именно происходит, когда я не подавляю его?

ответ

2

По умолчанию BizTalk отправляет полезную нагрузку сообщения (контент-тело) при ее отправке.

Когда вы пытаетесь использовать службу RESTful и хотите выполнить GET, вы обычно не хотите отправлять полезную нагрузку сообщения, вы просто слишком извлекаете содержимое из URL-адреса, поэтому вы хотите запретить отправку содержимого, тело.

См связанный с этим вопрос Cannot send a content-body with this verb-type

Что произойдет, если вы отправляете контент-тело с GET запрос изменяется. Некоторые прокси могут приводить к искажению или ошибке в запросе, а конечный сервер может выбрасывать и исключать, поскольку он не ожидал содержимого.

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

  • Нет связанных вопросов^_^