.Net Web Service Client SoapExtension 搞砸了来自 Java Web Service

本文关键字:Web Service Java Client SoapExtension Net | 更新日期: 2023-09-27 18:34:10

我试图向我的项目添加一个SoapExtension,它使用Web引用来调用Java Web服务。我的所有代码都在 .Net 4.0 中

我刚刚添加了一个空的肥皂扩展

public class MyServiceSoapExtension : SoapExtension
{
    private Stream inwardStream;
    private Stream outwardStream;
    public override object GetInitializer(Type serviceType)
    {
        return serviceType;
    }
    public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
    {
        return null;
    }
    public override void Initialize(object initializer)
    {
    }
    public override Stream ChainStream(Stream stream)
    {
        outwardStream = stream;
        inwardStream = new MemoryStream();
        return inwardStream;
    }
    public override void ProcessMessage(SoapMessage message)
    {
    }
}

我在客户的app.config中添加了:

<system.web>
    <webServices>
        <soapExtensionTypes>
            <add type="MyServiceClient.MyServiceSoapExtension, MyServiceClient" priority="1" />
        </soapExtensionTypes>
    </webServices>
</system.web>

我相信上面的代码还没有改变,当我运行它时,我Response is not well-formed XML. System.Web.Services.Protocols.SoapClientType.Invoke方法抛出了一个Root element is missing.异常(我已经打开了 CLR 调试(。如果我删除 app.config 中的配置以绕过 SoapExtension,我可以从服务器接收任何返回。

我使用 Fiddler 来跟踪传出和响应消息,我从服务器返回 SOAP 是

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Client</faultcode>
            <faultstring>Unmarshalling Error: javax.xml.transform.stax.StAXResult </faultstring>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

我相信这是一个有效的 SOAP 响应。

这是怎么回事?

.Net Web Service Client SoapExtension 搞砸了来自 Java Web Service

我认为这是因为进程消息方法为空。我遇到了完全相同的问题,我的进程消息方法仅处理序列化后的情况,一旦我在反序列化之前处理了该过程,一切正常:

case SoapMessageStage.BeforeDeserialize:
{
    Copy(wireStream, appStream);
    appStream.Position = 0;
    break;
}