Я пытаюсь вызвать веб-службу 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 взялась? Где это определено? И как я могу изменить это, чтобы это было что-то еще?