2015-09-02 4 views
0

У меня есть WCF, который я создал:Использовать службу WCF через ajax на asp.net?

http://localhost:63542/GetStoresByLocation.svc

Он будет жить на другом сервере, чем страницы, потребляющего его.

И мне нужно использовать его через ajax. Общественный метод

Public GetStores(<some params>) As String blahblah

И контракт оформлен таким образом:

<OperationContract> <WebInvoke(Method:="GET", BodyStyle:=WebMessageBodyStyle.Wrapped, ResponseFormat:=WebMessageFormat.Json)>

Вот веб-конфигурации для проекта WCF ...

<system.serviceModel> 
<services> 
    <service name="BRCWS.StoreLocator.GetStoresByLocation" behaviorConfiguration="ServiceBehavior"> 
    <!--<endpoint address="" binding="webHttpBinding" contract="BRCWS.StoreLocator.IGetStoresByLocation" behaviorConfiguration="EndpBehavior"/>--> 
    <endpoint address="mex" binding="mexHttpBinding" contract="BRCWS.StoreLocator.IGetStoresByLocation" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior>  
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="EndpBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 

Мне нужно две вещи:

  1. Что, если что-нибудь, мне не хватает, чтобы быть в состоянии потреблять его через AJAX, помещенную в asp.net (ASCX) управления/страницы

  2. что URL-адрес для вызова Ajax?

ответ

0

Я наконец-то выяснил это. Я использовал комбинацию из следующих ресурсов:

Это не разумно размещать фрагменты из этих ресурсов, но я буду предоставлять веб-архивы, которые, надеюсь, не будет идти вниз:

  1. Создайте свою базовую услугу WCF, что разрешает адрес, который вы можете увидеть в тесте WCF, который появляется при запуске вашего сервисного проекта.

  2. Реализовать код, как предложено здесь: http://www.aspsnippets.com/Articles/Consuming-WCF-Rest-Service-using-jQuery-AJAX-in-ASPNet.aspx

  3. Запустите службу и скопировать адрес для службы WCF из тестера, добавить любой GET Params у вас есть.

  4. Устранение ошибок, которые дает браузер. Они очень понятны, если вы просто прочитали их.

  5. Если вы по-прежнему есть проблемы, иди сюда: https://social.msdn.microsoft.com/Forums/silverlight/en-US/97d700be-1310-4a90-bd15-8aeceb56d11e/aspnet-compatibility-mode-for-wcf-web-service

  6. Ваша служба не будет отображаться в WCF тестера, потому что ваш web.config не будет указать адрес для службы. Таким образом, тестер не найдет его.Я предлагаю захватывая адрес, как только вы получите базовую форму сервиса работает (так что вы можете получить порт, и т.д.)

Ссылки на веб-архивы: Ссылка 1: https://archive.is/VefFk Ссылка 2: https://archive.is/XKMyH

фрагменты кода:

Интерфейс:

<ServiceContract()> 
Public Interface IGetStoresByLocation 
    <OperationContract> 
    <System.ServiceModel.Web.WebInvoke(Method:="GET", ResponseFormat:=System.ServiceModel.Web.WebMessageFormat.Json)> 
    Function GetStores(<blahblah>) as 

Класс:

Imports System.ServiceModel.Activation 
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> 
Public Class GetStoresByLocation 
    Implements IGetStoresByLocation 
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json)> 
Public Function GetStores(<blahblah>) as string Implements IGetStoresByLocation.GetStores 

URL:

http://localhost:63542/GetStoresByLocation.svc/GetStores?<params in get format>

Web конфигурации:

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="ServiceAspNetAjaxBehavior"> 
     <enableWebScript/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
<services> 
    <service name="BRCWS.StoreLocator.GetStoresByLocation" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="" binding="webHttpBinding" contract="BRCWS.StoreLocator.IGetStoresByLocation" behaviorConfiguration="ServiceAspNetAjaxBehavior"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
    </service> 
</services> 

Смежные вопросы