2016-03-04 9 views
0

I м, используя метод расширения ToHttpRequestMessage в ссылке, показанной здесь MessageExtensionMethodsMessageExtensionMethods.ToHttpRequestMessage терпит неудачу с исключением

static void Main(string[] args) 
{ 
    try 
    { 

      Message soapMessage = Message.CreateMessage(MessageVersion.Soap11, "urn:MyAction", "TestBody"); 
      soapMessage.Properties.Add("httpRequest", new HttpRequestMessageProperty()); 

      HttpRequestMessage requestMessage = soapMessage.ToHttpRequestMessage(); 
    } 
    catch (Exception exception) 
    { 
    } 
} 

Сообщение об исключении: { "Ожидая элемент„поток“из пространства имен„http://schemas.datacontract.org/2004/07/System.IO“.. Засада„Element“ с именем 'string', namespace 'http://schemas.microsoft.com/2003/10/Serialization/'. "}

Любая идея, что я делаю неправильно? Или есть ошибка в самом коде .NET

+0

Если вы измените «TestBody» на «123», он будет вызывать ту же ошибку сериализации, за исключением того, что будет сказано «Элемент Encountered» 'с именем' int''. Поэтому я уверен, что это аргумент «TestBody». однако я не знаю, что добавить туда, потому что Stream является абстрактным и использование класса, полученного из потока, похоже, не работает. –

+0

@ConradFrix Да, моя цель - преобразовать входящее сообщение WCF в HttpRequestMessage и попытаться отправить запрос с использованием HttpClient, и я надеялся использовать этот встроенный метод расширения, который предоставляет .NET, но он не работает, я думаю – StackOverflowVeryHelpful

ответ

0

Это невозможно с любым объектом сообщения. Проблема, которую я вижу, заключается в том, что эти методы расширения не предназначены для использования с любыми типами сообщений, но только экземпляры ByteStreamMessage. Это не очень хорошо документированы в документации, но упоминается в документации сестры класса

HttpRequestMessageExtensionMethods

Экземпляр сообщение может быть прочитано, написано и копироваться только в качестве традиционного экземпляра ByteStreamMessage. Экземпляр сообщения может также «читать», чтобы извлечь исходный экземпляр HttpRequestMessage, вызвав метод расширения ToHttpRequestMessage.

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