0

.asmx ファイルを使用して Web サービスをセットアップしました。その Web メソッドは、クライアント側で Ajax (すべて asp.net scriptmanager などを使用) 経由で呼び出されています。

Web サービスを呼び出して、コールバックの戻り値の値を見ると、'SOAP' 形式、つまり xml ではありません。代わりに、値はそのままの形式で返されます。たとえば、Web サービスから文字列を返す場合、成功したコールバックに渡される結果は文字列であり、エンコードも XML タグで囲まれてもいません。これを SOAP 形式で表示するにはどうすれば変更できますか?

4

2 に答える 2

0

jqueryから呼び出していますか?Json 形式で返される可能性があります。あなたのコードを見ずに私の推測。

于 2013-03-19T05:34:59.173 に答える
-1

Web サービス関数の結果が返され、基盤となる SOAP の詳細をすべて .NET に処理させているようです。コードで HTTP SOAP 応答を確認する場合に必要なことは、Web サービスを参照して関数を呼び出す代わりに、HTTP SOAP 要求を発行することです。VB.NET の場合:

Dim _soapRequest As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & _
                             "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" & _
                                "<soap:Body>" & _
                                "<CelsiusToFahrenheit xmlns=""http://tempuri.org/"">" & _
                                "<Celsius>" & 100 & "</Celsius>" & _
                                 "</CelsiusToFahrenheit>" & _
                                "</soap:Body>" & _
                                "</soap:Envelope>"
Dim response As String = DoRequestResponse(_soapRequest, "http://localhost:88/Service1.asmx")

DoRequestResponse 関数は次のようになります

Public Function DoRequestResponse(ByVal _p_RequestString As String, ByVal _p_RequestURL As String) As String

    Dim _httpWebRequest As HttpWebRequest
    Dim _httpWebResponse As HttpWebResponse
    Dim _streamReq As Stream
    Dim _streamResp As Stream
    Dim _streamReader As StreamReader
    Dim _responseString As String
    Dim _bytesToWrite() As Byte

    Try
        _httpWebRequest = CType(WebRequest.Create(_p_RequestURL), HttpWebRequest)
        _httpWebRequest.Method = "POST"
        _httpWebRequest.ContentType = "text/xml"
        _httpWebRequest.Timeout = 30000
        Dim EncodingType As System.Text.Encoding = System.Text.Encoding.UTF8
        _bytesToWrite = EncodingType.GetBytes(_p_RequestString)

        _streamReq = _httpWebRequest.GetRequestStream()
        _streamReq.Write(_bytesToWrite, 0, _bytesToWrite.Length)
        _streamReq.Close()

        _httpWebResponse = DirectCast(_httpWebRequest.GetResponse(), HttpWebResponse)
        _streamResp = _httpWebResponse.GetResponseStream()

        _streamReader = New StreamReader(_streamResp)
        _responseString = _streamReader.ReadToEnd()

        _streamReader.Close()
        _httpWebResponse.Close()

    Catch ex As Exception
        Dim _ex As WebException = ex
        Console.Write(_ex.Status)
        Console.Write(DirectCast(_ex.Response, HttpWebResponse).StatusCode)
        Throw New Exception("DoRequestResponse Error :" & vbCrLf & ex.Message)
    End Try

    Return _responseString

End Function

asp.net ページのコード ビハインドでこのようなことを行い、ポストバックなどを介して AJAX から呼び出すことができます。これにより、.asmx Web サービスにポストされ、SOAP 応答が返されます。

于 2012-12-03T17:44:41.500 に答える