为什么我的WebService没有被触发?

时间:2017-12-13 10:30:50

标签: c# angularjs web-services http-post

我使用网络服务发布一些数据但从未触发过Web服务。

这里我如何在客户端调用web服务:

    function saveData(year, month, someString) {

        $http({
            method: 'POST',
            url: "../../Services/ReportDepartmentService.asmx/SaveXml",//?" + 'year=' + year + '&' + 'month=' + month,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: { "year": year, "month": month, "someString": someString }
        }).then(function success(response) {
            var success = true;
        }, function error(response) {
            var success = false;
        });
    }

这是我的网络服务:

    [WebMethod]
    public void SaveXml(string year, string month, string someString)
    {
       //some logic
    }

但Web服务SaveXml从未被触发。在浏览器控制台中我收到此错误:

System.InvalidOperationException: SaveXml Web Service method name is not valid.
   at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

知道为什么没有执行触发器以及为什么我上面会出现错误?

1 个答案:

答案 0 :(得分:2)

您应该像下面一样装饰您的网络服务。我在这里定义了将格式返回为“Json”。如果您需要xml,则可以相应地进行更改。

  

当你正在进行ajax调用时,你需要在你的内容中定义   service方法(ScriptMethod)。包含Web / Script方法的类必须具有   [System.Web.Script.Services.ScriptService]以便可以调用   来自ajax(根据.asmx代码模板添加的评论)

[WebService(Namespace = "http://YourNameSpaceGoesHere/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class ReportDepartmentService: System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public string SaveXml(string year, string month, string someString)
    {
        string returnMessage = string.Empty;
        // Remaining code goes here.....
        // Assign Success/error message to your returnMessage. 
        return returnMessage;
    }
}

如下所示更改您的服务类,并告知我们是否解决了您的问题