Согласно вашему описанию, вам необходимо сериализовать сообщение SOAP самостоятельно. Messageinspector - это просто перехватчик сообщений, который можно использовать для изменения содержимого сообщения. Сериализация в messageinspector не подходит. Я предлагаю вам использовать DataContractSerializerOperationBehavior. Сериализуйте сообщение SOAP в классе, наследующем DataContractSerializerOperationBehavior.
Вот демонстрация:
public class NetDataContractSerializerOperationBehavior : DataContractSerializerOperationBehavior
{
public NetDataContractSerializerOperationBehavior(OperationDescription operationDescription)
: base(operationDescription)
{
}
public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer(name, ns);
}
public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer(name, ns);
}
}
Это класс, наследующий DataContractSerializerOperationBehavior, в котором вы можете написать свои собственные методы сериализации .
ServiceHost selfHost = new ServiceHost(typeof(Service1));
foreach (ServiceEndpoint serviceEndpoint in selfHost.Description.Endpoints)
{
foreach (OperationDescription operation in serviceEndpoint.Contract.Operations)
{
operation.Behaviors.Remove<DataContractSerializerOperationBehavior>();
operation.Behaviors.Add(new NetDataContractSerializerOperationBehavior(operation));
}
}
Добавьте собственное поведение сериализации к поведению службы и удалите поведение сериализации по умолчанию.
Это ссылка на DataContractSerializerOperationBehavior:
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.description.datacontractserializeroperationbehavior?view=dotnet-plat-ext-3.1