WCF REST Service URL - PullRequest
       3

WCF REST Service URL

0 голосов
/ 23 апреля 2011

Я создал службу стиля WCF REST в своем проекте.В процессе разработки я могу указать относительный URL-адрес для доступа к своему сервису:

 jQuery.ajax({
        url: "/WebServices/AddressWebService.svc/GetCountry",
        datatype: "json",
        success: function (data) {

            jQuery.each(data.GetCountryResult, function (index, value) {

                //value.entityData.CountryGuid
                //value.entityData.CountryName
                $('#dataCountry').empty();
                $('#dataCountry').append('<option value="' + value.entityData.CountryGuid + '">' + value.entityData.CountryName + '</option>');




            });

        }

    });

При размещении на IIS (с портом 81) с именем корневой папки c2c я больше не могу получить доступ кservice

Используя ошибку огня, я попытался увидеть заголовки, мой относительный URL ("/WebServices/AddressWebService.svc/GetCountry) добавляется к моему хосту (localhost: 81), но имя виртуальной папки (c2c)не добавляется. В результате он показывает исключение файла не найдено

Если я использую полный URL-адрес (http://localhost:81/c2c/WebServices/AddressWebService.svc/GetCountry),, он работает нормально.

Если я использую полный URL-адрес, онбудет сложно вносить изменения при переходе в рабочую среду. Хотя мы можем использовать глобальные переменные для хранения webroot (в данном случае c2c)

Есть ли какое-то простое решение для решения этой проблемы, я также дал базовый адресв конфигурационном файле

<system.serviceModel>


         </binding>
     </webHttpBinding>
 </bindings>
 <services>
     <service name="c2c.WebServices.AddressWebService" behaviorConfiguration="jsonBehavior">

         <host>
             <baseAddresses>
                 <add baseAddress="http://localhost:81/c2c"/>
             </baseAddresses>
         </host>         

     <endpoint address="" binding="webHttpBinding" bindingConfiguration="webmax" contract="c2c.WebServices.IAddressWebService" behaviorConfiguration="jsonendpointBehavior" />

     <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
     </service>
 </services> 

Ответы [ 3 ]

3 голосов
/ 23 апреля 2011

Вам необходимо получить относительный URL-адрес для вызова метода ajax.Обычно я делаю

$.ajax({ url: "<%=ResolveUrl("~/Services/Service.asmx/ServiceMethod") %>" });

(очевидно, вам нужно будет задать остальные параметры, и это должно быть на элементе управления ASP .NET (например, на странице)).

Однако, если вы не выплевываете JavaScript на странице, это не сработает.В этом случае вы захотите передать URL-адрес вашей веб-службы объекту JavaScript или пространству имен, которое определено в файле включения JavaScript.Таким образом, у вас может быть что-то вроде этого:

MyServiceMethodCaller.serviceUrl = "<%=ResolveUrl("~/Services/Service.asmx/ServiceMethod") %>";

, где вы определяете пространство имен MyServiceMethodCaller в вашем включаемом файле JavaScript.Таким образом, внутри вашего включаемого файла вы можете иметь:

var MyServiceMethodCaller = {
  serviceUrl: "",
  serviceMethod: function() {
    $.ajax({ url: this.serviceUrl });
  }
}

Я думаю, это должно работать.Я не приводил это в проверенном, работающем примере, но вы поняли суть.

0 голосов
/ 27 апреля 2011

Находится ли весь ваш сайт в виртуальном пути /c2c/ локально для тестирования на локальном хосте, но будет ли он развернут для работы на / в работе? Если это так, проще всего сделать так, чтобы ваша среда локального хоста соответствовала рабочей (то есть удалите /c2c/ из локального пути IIS).

Если нет, и /c2c/ - это место, где все будет в производстве, достаточно разумно использовать URL-адреса, такие как /c2c/WebServices/AddressWebService.svc/GetCountry, в своем коде jQuery. Даже если вам нужно изменить их, поиск / замена для url: "/c2c/ => url: "/ является относительно безопасным / простым рефакторингом.

0 голосов
/ 23 апреля 2011

Попробуйте изменить базовый адрес, чтобы иметь косую черту.например,

         <baseAddresses>
             <add baseAddress="http://localhost:81/c2c/"/>
         </baseAddresses>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...