根据您的描述,您需要自己序列化 SOAP 消息。Messageinspector 只是一个消息拦截器,可以用来修改消息的内容。messageinspector 中的序列化不合适。我建议您使用 DataContractSerializerOperationBehavior。在继承 DataContractSerializerOperationBehavior 的类中序列化 SOAP 消息。
这是一个演示:
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