Web 参照を使用して Java Web サービスを呼び出すプロジェクトに SoapExtension を追加しようとしました。私のコードはすべて.Net 4.0にあります
空の SoapExtension を追加しました
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.
でRoot element is missing.
例外がスローされましたSystem.Web.Services.Protocols.SoapClientType.Invoke
(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 応答だと思います。
ここで何が問題なのですか?