WCF: использование службы WCF с использованием jQuery, а также приложения Windows - PullRequest
0 голосов
/ 13 мая 2011

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

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

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

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

Исходя из этой ошибки, я думаю, мне следует создать другую конечную точку для обслуживания приложений, не относящихся к 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=&quot;Data Source=bdowrmg01;Initial Catalog=ORMU_Prototype;user=sa;password=Password1;MultipleActiveResultSets=True&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 Ответ

1 голос
/ 13 мая 2011

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

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

...