Web Services asmx Web服务无法运行

qmelpv7a  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(260)

我已经在现有项目中创建了一个asmx Web服务,当我尝试运行Web服务时,我得到了这个错误“请求格式无法识别”。请帮助我解决这个问题。我是asmx Web服务的新手。
我尝试过的方法:在调查此问题时,几乎没有解决方案可将Web服务get和post方法添加到webConfig中,尝试添加后仍无法清除此错误。似乎在使用Web服务期间会发生此错误。
error message

polhcujo

polhcujo1#

好的,当您设置Web服务时,您可以通过两种方式完成此操作:
创建一个特定的页面(asmx),或者您可以简单地将您的函数直接放入现有的网页中,并将它们标记为web方法。
假设这个网页有一个名和姓文本框,我们创建一个web方法来获取这两个值,并返回一个全名(名+姓)。
因此,我们的标记将如下所示:

<font size="3">Enter First Name: </font>
        <asp:TextBox ID="txtFirst" runat="server" ClientIDMode="Static"></asp:TextBox>

        <font size="3" style="margin-left:35px">Enter Last Name: </font>
        <asp:TextBox ID="txtLast" runat="server" ClientIDMode="Static"></asp:TextBox>

        <asp:Button ID="cmdAjax" runat="server" Text="Call web method" CssClass="btn"
            style="margin-left:35px"
            OnClientClick="mytest();return false;"
            />

        <br />
        <br />
        <font size="3">Full name result from Web method</font>
        <br />
        <asp:TextBox ID="txtFullName" runat="server" Width="283px" ClientIDMode="Static"></asp:TextBox>

紧接着,我们进行了Web服务调用-我们在这里使用jQuery。
所以,我们有这个:

<script>
        function mytest() {
            tFirstName = $("#txtFirst").val()
            tLastName = $("#txtLast").val()

            $.ajax({
                type: "POST",
                url: "AjaxTestFun.aspx/FullName",
                data: JSON.stringify({ FirstName : tFirstName, LastName : tLastName}),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (rData) {
                    // put results send back into txtFullName
                    $('#txtFullName').val(rData.d)
                },
                failure: function (rData) {
                    alert("error " + rData.d);
                }
            });
        }
    </script>

因此,当我们运行并单击按钮时,我们会看到/得到以下内容:

和我们的代码背后-在这个相同的网页(不需要一个单独的asmx页面-但它将工作一样,无论哪种方式)。
所以,我们有这个:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

<System.Web.Services.WebMethod()>
Public Shared Function FullName(FirstName As String, LastName As String) As String

    Dim sResult As String = ""

    sResult = FirstName + " " + LastName

    Return sResult

End Function

请注意,我们必须在 AJAX 调用中匹配相同的名称作为该Web方法的参数。
但最有趣的是什么?
该Web方法支持:

Plain jane REST (with URL parameters)
ajax call web api (with header parameters)
XML soap soap calls!!!

因此,您实际上不必使用Web方法创建单独的页面。
但是,我想我可以将FullName上面的内容放到webservice1.asmx中,如下所示:

<WebMethod()>
Public Function FullName(FirstName As String, LastName As String) As String

    Dim sResult As String = ""

    sResult = FirstName + " " + LastName

    Return sResult

End Function

因此,请注意,我不必将方法设置为“static”,因为我们没有将Web方法放入现有的aspx页面中。
所以,现在 AJAX 变成了这样:

function mytest() {
            tFirstName = $("#txtFirst").val()
            tLastName = $("#txtLast").val()

            $.ajax({
                type: "POST",
                url: "WebService1.asmx/FullName",
                data: JSON.stringify({ FirstName : tFirstName, LastName : tLastName}),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (rData) {
                    alert('back')
                    // put results send back into txtFullName
                    $('#txtFullName').val(rData.d)
                },
                failure: function (rData) {
                    alert("error " + rData.d);
                }
            });
        }
    </script>

请注意,我们可以这样做一个简单的休息呼叫:

(我将参数直接放入URL)。
因此,如jQuery所示,简单的web方法将返回json或XML --它不需要您做任何额外的工作就可以完成这一任务。
直接键入URL(不带标头的REST调用),那么默认情况下它会返回xml,但您可以只执行一个响应。

相关问题