WCF: Использовать службу WCF с помощью jQuery, а также приложение Windows

#jquery #wcf #json #poco

#jquery #wcf #json #poco

Вопрос:

Я успешно использовал службу WCF с помощью jQuery, перейдя по этой ссылке:http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx

Я только что внес несколько изменений в свои объекты POCO для правильной сериализации. Все работает нормально, если используется jQuery или при просмотре с помощью браузера (изменен глагол на get).

Теперь я создал приложение Windows и добавил ссылку на службу к этой службе. Это успешно завершается, и я могу видеть классы / методы и все остальное. Однако, когда я пытаюсь запустить приложение, я получаю следующую ошибку:

«Не удалось найти элемент конечной точки по умолчанию, который ссылается на contract [ContractName] в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не был найден файл конфигурации или потому, что в элементе client не удалось найти элемент конечной точки, соответствующий этому контракту.»

Исходя из этой ошибки, я полагаю, мне следует создать другую конечную точку для обслуживания приложений, отличных от http? Хотя я не совсем уверен, как это работает..

Вот мой webconfig

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="EntityDataModelContainer" connectionString="metadata=res://*/EntityDataModel.csdl|res://*/EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider connection string=amp;quot;Data Source=bdowrmg01;Initial Catalog=ORMU_Prototype;user=sa;password=Password1;MultipleActiveResultSets=Trueamp;quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ORMDefaultServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="ORMDefaultServiceBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ORMDefaultServiceBehavior"
                 name="ORM.Business.KCSA">
        <endpoint address="" binding="webHttpBinding"
           contract="ORM.Business.IKCSA"
           behaviorConfiguration="ORMDefaultServiceBehavior"/>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>
  

Кроме того, вот контракт:

 [ServiceContract]
public interface IKCSA
{
    [OperationContract]
    [ApplyDataContractResolver]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped,Method="GET",ResponseFormat=WebMessageFormat.Json)]
    JsonResponse<IEnumerable<KCSATopic>> GetTopics();
}
  

Комментарии:

1. Это пугающее количество усилий только для размещения одного веб-сервиса. Вам следует взглянуть на servicestack.net где вы можете создать целое приложение с меньшими усилиями, чем при настройке приложения WCF. Завершите выполнение приложения TODO servicestack.net/Backbone. Задачи и весь исходный код .cs goo.gl/zA6hD

Ответ №1:

Ссылки на службы работают только с веб-сервисами SOAP (через определение WSDL), а не с веб-сервисами HTTP (он же REST), которые у вас есть.

Итак, вам нужно либо использовать HttpWebRequest класс для использования вашей службы, либо добавить другую привязку к вашей службе типа wsHttpBinding .