如何使用WSDL方案获取soap字符串

时间:2016-02-22 09:56:01

标签: c# soap wsdl

我有一个wsdl,它有一个发送数据的方法, 而不是通过这种方法发送它我想得到如果我使用该方法将发送的肥皂串。

如果有人知道是否可能或如何做到这一点, 谢谢你的帮助,

1 个答案:

答案 0 :(得分:0)

我显然不知道您的架构或基础架构是什么样的,因此以下内容可能不适用,但听起来可能会出现混乱问题。有责任心。不是在MQ上发布SOAP有效负载,而是仅发布消费者需要执行的操作所需的数据。例如。您将SOAP信封发布到队列中,但是如果有另一个消费者对此消息感兴趣呢?它可能不希望它采用SOAP格式,而是采用JSON格式,或者只是想根据发布的数据更新数据库表。我会说相当推动原始'数据并让消费者决定如何处理它......

总之... 实现这一目标的快捷方式:

MessageInspector:

public class MessageInspector : 
    IClientMessageInspector
{
    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        var r = request.ToString(); // this will return the SOAP string...
        return request;
    }

    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        //throw new NotImplementedException();
    }
}

EndpointBehavior:

public class MessageInspectorBehavior : 
    IEndpointBehavior
{
    public void Validate(ServiceEndpoint endpoint)
    {
        //throw new NotImplementedException();
    }

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
    {
        //throw new NotImplementedException();
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
        //throw new NotImplementedException();
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime
            .MessageInspectors
            .Add(new MessageInspector());
    }
}

然后在客户端上设置行为:

class Program
{
    static void Main(
        string[] args
        )
    {
        var ser = new ServiceReference1.Service1Client();
        ser.Endpoint
            .Behaviors
            .Add(new MessageInspectorBehavior());

        var f = ser.GetData(10);

        Console.WriteLine(f);
        Console.ReadKey();
    }
}

这里的问题是仍然对服务进行调用......另一种方法是手动创建SOAP消息

也许这会有所帮助: How to post SOAP Request from .NET?