Результаты работы службы asmx в документе не найдены - PullRequest
0 голосов
/ 06 декабря 2011

Так что я тяну волосы за это.Среда: веб-форма ASP.net C # 2008. У меня уже есть это решение.Я создал asmx webservice, как показано ниже (см. Код), и я пытаюсь получить к нему доступ через браузер.В основном, когда я указываю на http://localhost/service.asmx, он работает нормально, и я вижу доступные операции и прочее. Я также могу видеть операции подробно по URL 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 ]

2 голосов
/ 06 декабря 2011

Я просто скопировал, вставил ваш частичный код, добавил собственный пользовательский веб-элемент управления (имеет только статический HTML «привет мир») и проверил веб-сервис, и он отлично работает.

пару вещей для проверки.

1) Отладка и пошаговое выполнение кода для проверки правильности работы всего кода сервера без каких-либо исключений

2) в части http://localhost/service.asmx?op=Coupons есть кнопка Invoke. Проверьте, работает ли он правильно. если да, я думаю, что проблема кроется где-то еще

3) Также просмотрите ошибку и ее трассировку стека, чтобы получить лучшее представление. Опубликуйте здесь трассировку стека с полной ошибкой, также под вопросом.

надеюсь, это поможет.

0 голосов
/ 06 декабря 2011

Используя F11 для отладки вашего кода, попробуйте посмотреть, что произошло, когда вы вызываете webservice, и посмотрите, что вернуло "ViewManager.RenderView (" ~ / Modules / CouponsPromotions / CouponCenter.ascx ");".надеется, что все идет хорошо.

...