asmx服务操作导致文档未找到

时间:2011-12-06 06:15:01

标签: c# asp.net web-services asmx

所以我把头发拉过来。环境:ASP.net网络表格C#2008。 我已经有了this解决方案。 我创建了一个asmx webservice,如下所示(请参阅代码),我试图通过浏览器访问它。基本上当我指向http://localhost/service.asmx它工作正常,我可以看到可用的操作和东西..我也可以在网址http://localhost/service.asmx?op=MethodName看到详细的操作,但问题出现在我实际尝试服务或调用。我找不到http://localhost/service.asmx/MethodName。 知道会出现什么问题吗?

[WebService(Namespace = "http://locahost/")]
[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 WellnessService : System.Web.Services.WebService
{

    [WebMethod]
    public string MethodName()
    {
        return ViewManager.RenderView("~/Modules/CouponsPromotions/CouponCenter.ascx");
    }
}
public class ViewManager
{
    public static string RenderView(string path)
    {
        return RenderView(path, null);
    }

    public static string RenderView(string path, object data)
    {
        Page pageHolder = new Page();
        UserControl viewControl = (UserControl)pageHolder.LoadControl(path);

        if (data != null)
        {
            Type viewControlType = viewControl.GetType();
            FieldInfo field = viewControlType.GetField("Data");

            if (field != null)
            {
                field.SetValue(viewControl, data);
            }
            else
            {
                throw new Exception("View file: " + path + " does not have a public Data property");
            }
        }

        pageHolder.Controls.Add(viewControl);

        StringWriter output = new StringWriter();
        HttpContext.Current.Server.Execute(pageHolder, output, false);

        return output.ToString();
    }
}

这就是我通过JS调用的方式

$(document).ready(function() {
$('#liCoupons').click(function() {
        $.ajax({
            type: "POST",
            url: "/services.asmx/MethodName",
            data: "", 
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                $('#result').html(msg.d);
            },
            error: ajaxFailed
            //error

        });
    });

    function ajaxFailed(xmlRequest) {
        alert(xmlRequest.status + ' \n\r ' +
              xmlRequest.statusText + '\n\r' +
              xmlRequest.responseText);
    }
});  

2 个答案:

答案 0 :(得分:2)

我只是复制粘贴你的部分代码,添加了一个我自己的web用户控件(只有静态HTML“hello world”)并测试了webservice并且工作正常。

要检查的事情。

1)调试并逐步执行代码以查看Web服务是否正确运行所有服务器代码,没有任何例外

2)http://localhost/service.asmx?op=Coupons部分中有一个Invoke按钮。测试它是否正常工作。如果是的话,我认为问题出在其他地方

3)另外请查看错误及其堆栈跟踪以获得更好的主意。在这里发布堆栈跟踪,但也有问题。

希望这会有所帮助。

答案 1 :(得分:0)

使用F11调试代码,尝试查看调用webservice时发生的情况,并查看返回的内容“ViewManager.RenderView(”〜/ Modules / CouponsPromotions / CouponCenter.ascx“);”。 希望一切顺利。