簡體   English   中英

WCF 從 MessageInspector 發送 object 到操作方法

[英]WCF Sending object from MessageInspector to operation method

我正在使用一個非常復雜且嵌套的 web 服務。 消息並不總是在操作中正確反序列化,供應商建議我使用 MessageInspectors 來正確獲取數據。 這已經正常工作了一段時間,但我開始看到問題,因為在 MessageInspector 中,我在 class 中設置了一個 static XElement 變量,作為無法通過 XElement ZA8CFDE63311149EB2AC96F8 實例的解決方法class 開始為此調用。

一旦調用該操作,我就會立即將 static 變量復制到一個實例中,但我遇到了這個問題。

在 MessageInspector 處反序列化 SOAP 並將其傳遞給操作方法的正確方法是什么?

根據您的描述,您需要自己序列化 SOAP 消息。 Messageinspector 只是一個消息攔截器,可以用來修改消息的內容。 messageinspector 中的序列化不合適。 我建議您使用 DataContractSerializerOperationBehavior。 在繼承 DataContractSerializerOperationBehavior 的 class 中序列化 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 的 class,您可以在其中編寫自己的序列化方法。

     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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM