3

私はあちこちを検索しましたが、C#でこのようなXMLを構築するための最良の方法がわかりません。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
            <ns5572:calculate_something xmlns:ns5572="http://tempuri.org">
                <Input_data>
                <code_user xsi:type="xsd:string">test_user</code_user>
                <password_broker xsi:type="xsd:string">test_password</password>
                <subuser_id xsi:type="xsd:string"></subuser_id>
                </Input_data>
            </ns5572:calculate_something>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

私の質問は、この種の構造のための特別な専用クラスがあるかどうかです。前もって感謝します。

4

2 に答える 2

3

これはランダムなXMLではありません。それはSOAPリクエストのように見えます。これを調べてください。

于 2012-12-08T16:18:04.850 に答える
3

これは、SOAP Webサービスを呼び出すためのXMLです。これをC#経由で呼び出すには、C#プロジェクトへのサービス参照として追加できます。

サービスのWSDL(Webサービス定義言語ファイル)へのリンクが必要です。次に、プロジェクトにサービス参照を追加し、次の方法でその機能を簡単に呼び出すことができます。

1-サービスを呼び出すために使用するクライアントを定義します。

MyTestServiceSoapClient client = new MyTestServiceSoapClient();

2-このクライアントのメソッドを次のように呼び出します。

client.calculate_something("test_user", "test_password", "");

またはこれ:

client.calculate_something(new Input_data() 
{ code_user  = "test_user", password_broker  = "test_password", subuser_id  = ""}
);

この記事は、C#プロジェクトにサービス参照を追加するのに役立ちます。

リクエストとレスポンスのXMLをインターセプトするには、次の2つのクラスを実装します。

public class InspectorBehavior : IEndpointBehavior
{
    public string LastRequestXML { 
        get
        {
            return myMessageInspector.LastRequestXML;
        }
    }

    public string LastResponseXML { 
        get
        {
            return myMessageInspector.LastResponseXML;
        }
    }


    private MyMessageInspector myMessageInspector = new MyMessageInspector();
    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    {

    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {

    }

    public void Validate(ServiceEndpoint endpoint)
    {

    }


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





public class MyMessageInspector : IClientMessageInspector
{
    public string LastRequestXML { get; private set; }
    public string LastResponseXML { get; private set; }
    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
        LastResponseXML = reply.ToString();
    }

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
    {
        LastRequestXML = request.ToString();
        return request;
    }
}

次に、呼び出しコードを次のように変更します。

MyTestServiceSoapClient client = new MyTestServiceSoapClient();
var requestInterceptor = new InspectorBehavior();
client.Endpoint.Behaviors.Add(requestInterceptor );
client.calculate_something("test_user", "test_password", "");
string requestXML = requestInterceptor.LastRequestXML;
string responseXML = requestInterceptor.LastResponseXML;
// Now the xml you need is in "requestXML" variable
于 2012-12-08T16:26:36.887 に答える