更改 WCF 生成的 SOAP
Change SOAP produced by WCF
请告诉我如何改变一点肥皂。
事情是这样的:
<s: Envelope>
<s: Header>
...
</s: Header>
<s: Body>
<Method1 xmlns="http://my.site">
<Param1 xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
...
MyTestMethod - 是服务方法的名称。在必须是 param1。完全没有Method1的水平。
这里是合同:
[ServiceContract(Namespace = "http://my.site")]
public interface IMyService
{
[OperationContract]
Method1Response Method1(Method1Request param1);
}
我需要得到
<s: Envelope>
<s: Header>
...
</s: Header>
<s: Body>
<Param1 xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Value1>...
<Value2>...
...
您可能会查看接口 IClientMessageInspector 并从中派生。
public class SOAPInspector : IClientMessageInspector {
public void AfterReceiveReply(ref Message reply, object correlationState) {
//Your code
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel) {
//Your code
}
}
使用 BeforeSendRequest 方法,您可以在发送前修改生成的 SOAP 消息。
要获得 Inspector 运行,您还需要一个 EndpointBehaviour class,例如:
public class SOAPEndpointBehaviour : IEndpointBehavior {
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) {
clientRuntime.MessageInspectors.Add(new SOAPInspector());
}
}
最后注册你的行为
yourServiceClient.Endpoint.EndpointBehaviors.Add(new SOAPEndpointBehaviour());
解决方案是使用 MessageContract
但。从试图用它解决问题 - 与另一个相撞:
这很有趣。我遇到的问题,大部分描述MessageContract的文章都有!
在所有这些使用嵌套复杂类型的人身上,处处体现着这个神器!随便看看,注意 it.But,对于本文而言,这个工件并不重要。因此,无人问津。
不幸的是,这个错误很严重。
请告诉我如何改变一点肥皂。
事情是这样的:
<s: Envelope>
<s: Header>
...
</s: Header>
<s: Body>
<Method1 xmlns="http://my.site">
<Param1 xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
...
MyTestMethod - 是服务方法的名称。在必须是 param1。完全没有Method1的水平。
这里是合同:
[ServiceContract(Namespace = "http://my.site")]
public interface IMyService
{
[OperationContract]
Method1Response Method1(Method1Request param1);
}
我需要得到
<s: Envelope>
<s: Header>
...
</s: Header>
<s: Body>
<Param1 xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Value1>...
<Value2>...
...
您可能会查看接口 IClientMessageInspector 并从中派生。
public class SOAPInspector : IClientMessageInspector {
public void AfterReceiveReply(ref Message reply, object correlationState) {
//Your code
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel) {
//Your code
}
}
使用 BeforeSendRequest 方法,您可以在发送前修改生成的 SOAP 消息。
要获得 Inspector 运行,您还需要一个 EndpointBehaviour class,例如:
public class SOAPEndpointBehaviour : IEndpointBehavior {
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) {
clientRuntime.MessageInspectors.Add(new SOAPInspector());
}
}
最后注册你的行为
yourServiceClient.Endpoint.EndpointBehaviors.Add(new SOAPEndpointBehaviour());
解决方案是使用 MessageContract
但。从试图用它解决问题 - 与另一个相撞:
这很有趣。我遇到的问题,大部分描述MessageContract的文章都有! 在所有这些使用嵌套复杂类型的人身上,处处体现着这个神器!随便看看,注意 it.But,对于本文而言,这个工件并不重要。因此,无人问津。 不幸的是,这个错误很严重。