Я пытаюсь написать собственный адаптер WCF с помощью SDK адаптера большого объекта WCF.Кажется, что все работает нормально, за исключением того, что мне нужно отправить текстовую строку в нижестоящую систему через сокет.Когда метод Execute для IOutboundhandler завершается, я получаю следующую ошибку:
System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
со следующей трассировкой стека:
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)
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.EndRequest(IAsyncResult result)
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result)".
Вот мой метод execute:
/// <summary>
/// Executes the request message on the target system and returns a response message.
/// If there isn’t a response, this method should return null
/// </summary>
public Message Execute(Message message, TimeSpan timeout)
{
OperationMetadata om = this.MetadataLookup.
GetOperationDefinitionFromOutputMessageAction(message.Headers.Action, timeout);
if (om == null)
{
throw new AdapterException("Invalid operation " + message.Headers.Action);
}
MessageBuffer msgBuffer = message.CreateBufferedCopy(int.MaxValue);
XmlDictionaryReader reader = msgBuffer.CreateMessage().GetReaderAtBodyContents();
XmlDocument request = new XmlDocument();
request.LoadXml(reader.ReadOuterXml());
string positionalRs = this.Connection.Send(request.OuterXml);
XmlDocument response = new XmlDocument();
response.LoadXml(positionalRs);
XmlReader replyReader = XmlReader.Create(new StringReader(response.InnerXml));
return Message.CreateMessage(message.Version, message.Headers.Action + "/Response", replyReader);
}
Как получить доступ к телу сообщения WCF, отличного от xml?
Вот как выглядит мое сообщение WCF:
Сообщение:
<s:Envelope xmlns:a=http://www.w3.org/2005/08/addressing
xmlns:s=http://www.w3.org/2003/05/soap-envelope>
<s:Header>
<a:Action s:mustUnderstand=1>TCPCall</a:Action>
<a:MessageID>urn:uuid:e473f4e4-f6f5-47b5-92a6-123116fafaa5</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
</s:Header>
<s:Body>... stream ...</s:Body>
</s:Envelope>
тело сообщения не является xml.всякий раз, когда я пытаюсь это сделать, я получаю следующую ошибку:
"System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
Я пытаюсь отправить данные в сокет на другом конце, используя wfc.Кажется, у меня все работает, кроме возможности извлекать содержимое сообщения WCF, если оно не является XML.
Это помогает?