Я работаю с WCF для обмена сообщениями с третьей стороной. Сообщения необходимо отправлять и получать в конверте, который соответствует спецификация ebXML. В идеале я хотел бы использовать как можно больше стека WCF и избегать одного метода для обработки всех их, поскольку в этом случае это означало бы написание большей части инфраструктуры WCF снова.
Насколько я могу судить по моим первоначальным исследованиям, это потребует от меня написать собственную собственную привязку, но я изо всех сил стараюсь найти ясность в документации в MSDN.
Мне удалось найти много подробных документов в отдельных реализациях каждого из них, но очень мало о том, как собрать все это вместе целиком. Похоже, что книги, которые у меня есть, также легко освещены в этих темах, не упоминая об этом в "Pro WCF" Пирисом и Малдером.
То, что я стремлюсь, это что-то вроде следующего.
Отправляемые и полученные сообщения ДОЛЖНЫ быть отформатированы, как показано ниже, где имя первого элемента - это имя выполняемой операции, а дочерний элемент - полезная нагрузка сообщения запроса, будет иметь вид:
<?xml version="1.0" encoding="UTF-8"?>
<op:DoSomething xmlns:op="http://my.ebXML.schema.com" xmlns:payload="http://payload.company.com">
<op:AnObject>
<payload:ImportantValue>42</payload:ImportantValue>
</op:AnObject>
</op:DoSomething>
И ответ будет:
<?xml version="1.0" encoding="UTF-8"?>
<op:AcknowledgementResponse xmlns:op="http://my.ebXML.schema.com" xmlns:payload="http://payload.company.com">
<op:ResponseObject>
<payload:Ok>True</payload:Ok>
</op:ResponseObject>
</op:AcknowledgementResponse>
Поскольку все сообщения описываются схемами XML, я использовал XSD.exe для преобразования этих данных в строго типизированные объекты. См. https://gist.github.com/740303 для схем. Обратите внимание, что это примерные схемы. Я не могу публиковать реальные схемы, не нарушая соглашения о конфиденциальности клиентов (и вы тоже не хотите, чтобы они были огромными).
Теперь я хотел бы написать реализацию службы следующим образом:
public class MyEndpoint : IMyEndpoint
{
public AcknowledgementResponse DoSomething(AnObject value)
{
return new AcknowledgementResponse
{
Ok = True;
};
}
}
Любая помощь будет высоко оценена.