如何从请求响应中删除SOAP信封方法名称

本文关键字:方法 SOAP 删除 请求 响应 | 更新日期: 2023-09-27 18:01:15

使用ASP.NET Web服务时,它会自动添加MethodNameResultMethodaNameResponse

有没有一种简单的方法可以不包括它们,我们可以对请求进行同样的处理?

即,从中删除<tem:HelloWorld><tem:xml>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:HelloWorld>
         <tem:xml>

这是的响应样本

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <HelloWorldResponse xmlns="http://tempuri.org/">
         <HelloWorldResult>
         </HelloWorldResult>
      </HelloWorldResponse>
   </soap:Body>
</soap:Envelope>

如何从请求响应中删除SOAP信封方法名称

um。。。您可以手动处理响应并流式返回您自己的xml字符串,但为什么要这样做???这将破坏任何基于它构建的客户端应用程序。

编辑:(称之为阐述(:

本质上,你需要做的是创建自己的"soap扩展"。。。

public class MySOAPExtension : SoapExtension
{
     Stream oldStream;
     Stream newStream;
     // Save the Stream representing the SOAP request or SOAP response into
     // a local memory buffer.
     public override Stream ChainStream( Stream stream )
     {
            oldStream = stream;
            newStream = new MemoryStream();
            return newStream;
     }
    public override void ProcessMessage(SoapMessage message)
    {
       switch (message.Stage)
        {
            case SoapMessageStage.BeforeDeserialize:
                // before the XML deserialized into object.
                break;
            case SoapMessageStage.AfterDeserialize:
                break;        
            case SoapMessageStage.BeforeSerialize:
                break;
            case SoapMessageStage.AfterSerialize:
                break;            
            default:
                throw new Exception("Invalid stage...");
        }       
    }
}

从这里你可以选择你感兴趣的流程的哪一部分,如果需要,可以将其与这里的信息结合起来。。。

http://msdn.microsoft.com/en-us/library/ms525585%28v=vs.90%29.aspx

将您自己的xml返回到客户端

这并不容易,而且确实需要对服务生命周期有相当多的了解,但至少这遵循了服务请求的典型asp.net模型。。。

http://msdn.microsoft.com/en-us/library/ms178473.aspx

我认为您只对处理上面开关块中的"SoapMessageStage.AfterSerialize"来操作soap信封感兴趣。

后注:

根据您对操作请求soap数据包的进一步评论,当客户端构建一个服务器用作指令的soap数据包时,必须由调用客户端来完成,但是,操作请求信封可能会影响它的处理方式,或者实际上会破坏服务器处理soap数据包。

考虑到所有这些,您可能会发现更适合简单地实现自定义http处理程序,因为它可以接受任何内容并可能返回任何内容,使用web服务会强加一些基本的格式化规则,这些规则是由soap标准http处理程序所暗示的。。。

http://support.microsoft.com/kb/308001

这样更有帮助吗?