Изменение пространства имен в веб-сервисах ASP.NET .ASMX? - PullRequest
2 голосов
/ 14 сентября 2010

Я пытаюсь вызвать веб-службу ASP.NET .asmx из javascript, используя пространство имен, отличное от пространства по умолчанию, которое Visual Studio использует при его создании.

Когда я использую мастер Visual Studio для создания веб-службы с именем Hello, в папке WebServices она создает следующее:

namespace MyWebSite.WebServices
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class Hello : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

Это делается видимым для JavaScript в браузере следующим образом:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);

ServiceReference serviceReference = new ServiceReference();
serviceReference.Path = "~/WebServices/Hello.asmx";
serviceReference.InlineScript = false;

scriptManager.Services.Add(serviceReference);

И он вызывается из Javascript так:

MyWebSite.WebServices.Hello.HelloWorld(function(rval){{alert(rval);}});

Это прекрасно работает. Моя проблема в том, что мой вызывающий javascript находится в отдельной сборке, как часть серверного элемента управления, который ожидает другое пространство имен. Мне либо нужно переделать, как работает сборка - каким-то образом сделать пространство имен веб-службы параметром, либо мне нужно изменить пространство имен веб-службы, чтобы оно соответствовало вызову.

В настоящее время я изучаю последнее. (Поскольку изменение сборки будет означать изменение другого веб-сайта, который также использует эту сборку, и я бы предпочел этого не делать, если в этом нет необходимости).

Итак, я хочу, чтобы мой вызов Javascript выглядел так:

OtherNamespace.WebServices.Hello.HelloWorld(function(rval){{alert(rval);}});

Я думал, что могу просто изменить пространство имен в файле .asmx:

namespace OtherNamespace.WebServices
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    ...

Но это не работает. Я получаю сообщение об ошибке «Другое имя не определено». Очевидно, что хотя пространство имен в файле .asmx и префикс в вызове javascript имеют одно и то же значение, они не ссылаются на одно и то же.

Где работает MyWebSite.WebServices. Приставка, в вызывающем javascript взялась? Где это определено? И как я могу изменить это, чтобы это было что-то еще?

1 Ответ

4 голосов
/ 14 сентября 2010

Вы обновляли файлы ASMX и code-behind?В разметке ASMX есть ссылка.

...