Вопрос для новичка WCF: вызов методов из JavaScript - PullRequest
3 голосов
/ 03 апреля 2009

Привет!

Я новичок в WCF и подумал, что это будет похоже на веб-службы ASP.NET, но я не могу вызвать метод из клиентского JavaScript. Моя веб-форма выглядит так:

<form id="form1" runat="server">
   <div>
      <asp:ScriptManager ID="ScriptManager1" runat="server">
         <Scripts>
            <asp:ScriptReference Path="~/test.js" />
         </Scripts>
         <Services>
            <asp:ServiceReference Path="~/MyService.svc" />
         </Services>
      </asp:ScriptManager>
   </div>
   <button onclick="test()">Click Me</button>
</form>

Интерфейс моей службы выглядит следующим образом:

namespace Test
{
    [ServiceContract(Namespace = "Test")]
    public interface IMyService
    {
        [OperationContract]
        void DoWork();

        [OperationContract]
        string SayHi();
    }
}

А вот и его реализация:

namespace Test
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class MyService : IMyService
    {
        public void DoWork()
        {
        }

        public string SayHi()
        {
            return "Hello, World!";
        }
    }
}

И, наконец, JavaScript:

function test() {
    Test.MyService.SayHi(SayHiSuccess, SayHiError);
}

function SayHiSuccess(result) {
    alert(result[0]);
}

function SayHiError(error) {
    alert(error.toString());
}

Похоже, что метод сервиса SayHi () никогда не выполняется, хотя я не уверен, почему или как устранить неполадки. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 03 апреля 2009

Вы не опубликовали содержимое web.config. Какую привязку вы используете? Вы, вероятно, должны использовать webHttpBinding.

Кроме того, это может помочь узнать содержание вашего файла .svc. Хотя я никогда не пробовал, я понимаю, что вам вообще не нужно изменять web.config, если вы используете WebScriptServiceHostFactory в качестве фабрики хоста службы. Это так же просто, как изменить ваш файл .svc следующим образом:

<%@ ServiceHost Service="MyService"
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
 %>

Если ничего не помогает, вот несколько ресурсов для вас:

0 голосов
/ 03 апреля 2009

Ваш код выглядит нормально. Должен работать по праву. Вы также можете попробовать добавить атрибуты WebService и WebMethod.

Для отладки веб-службы WCF я обычно использую Fiddler для отслеживания HTTP-вызовов при выполнении кода WCF с подключенным отладчиком (в большинстве случаев запускается в Visual Studio).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...