![](/img/trans.png)
[英]405 Method Not Allowed - when sending object from jQuery to rest WCF
[英]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 的鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.