#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
.