2

こんにちは、2 つの異なるサーバーを持つ 2 つのクライアントがあります。wsdl クラスを生成した後、SoapHttpClientProtocol コンストラクターでそれに応じてクライアントの URL アドレスを変更します。

から

this.Url = "http://10.0.3.5:88/SomeName/dish

this.Url = "http://192.168.20.5:88/SomeOtherName/dish

しかし、実行時に SoapDocumentMethodAttribute を変更することはできません。それを変更しないと、私のメソッドは DataSet を null だけに戻しません。属性のすべてのアドレスを変更すると、すべて正常に動作します。

[System.Web.Services.Protocols.SoapDocumentMethodAttribute( "http://10.0.3.5:88/SomeName/EuroSoft/ProductTransferExecute", RequestNamespace = "http://10.0.3.5:88/SomeName/dish", ResponseNamespace = "http://10.0.3.5:88/SomeName/dish", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = 

System.Web.Services.Protocols.SoapParameterStyle.Wrapped )]
public System.Data.DataSet ProductTransferExecute( [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] string department, [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] string XMLproducts, out int sqlcode ) {}

サービスは、Sybase Anywhere 9 データベースによって生成されます。動的に変更することは可能ですか?これが機能するためには、何が同一である必要がありますか?

4

1 に答える 1

0

CustomSoapHttpClientProtocol を作成します。

public class CustomSoapHttpClientProtocol : SoapHttpClientProtocol
{
    public string SoapActionUrl { get; private set; }

    public CustomSoapHttpClientProtocol(string soapActionUrl)
    {
        this.SoapActionUrl = soapActionUrl;
    }
    protected override WebResponse GetWebResponse(WebRequest request)
    {
        const string soapAction = "SOAPAction";
        if (request.Headers.Count > 0 && request.Headers.AllKeys.Contains(soapAction))
        {
            request.Headers[soapAction] = SoapActionUrl;
        }
        WebResponse response = base.GetWebResponse(request);
        return response;
    }

次に、プロキシ クラスで SoapHttpClientProtocol を CustomSoapHttpClientProtocol に置き換えます。

于 2015-11-05T19:41:56.797 に答える