Предоставление службы WCF с поддержкой Ajax для кода C # - PullRequest
3 голосов
/ 29 марта 2012

Я создал «службу WCF с поддержкой Ajax».Я могу использовать сервис из кода JavaScript, и WebService работает как задумано.Но я хочу написать АТФ вокруг этого.Итак, я добавляю веб-сервис в качестве «Справочника услуг» в мой проект ATP.Тогда я использую вызов веб-службы, как обычно.Все отлично компилируется.Но когда я запускаю ATP, он возвращает мне эту ошибку

"System.InvalidOperationException: не удалось найти элемент конечной точки с именем 'ServiceReference1.IWCFService' и контрактом 'ServiceReference1.IWCFService' в клиенте ServiceModelраздел конфигурации. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или из-за того, что ни один элемент конечной точки, соответствующий этому имени, не найден в элементе client. "

Это то, что у меня есть в моем приложении.config файл ATP.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IWCFService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFService"
            contract="ServiceReference1.IWCFService" name="BasicHttpBinding_IWCFService" />
    </client>
<services>
    <service name="ServiceReference1.WCFService">
        <endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc" behaviorConfiguration="org.proj.WebServices.WCFServiceAspNetAjaxBehavior"
                binding="webHttpBinding" contract="org.proj.WebServices.IWCFService" />
    </service>
</services>
<behaviors>
    <endpointBehaviors>
        <behavior name="org.proj.WebServices.WCFServiceAspNetAjaxBehavior">
            <enableWebScript />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
    </serviceBehaviors>
</behaviors>
</system.serviceModel>

Пожалуйста, дайте мне знать, что могло пойти не так ??У меня нормальная служба WCF, и она работает нормально.

Пожалуйста, помогите.

С уважением Яш

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Приведенный выше ответ Дрю Марша частично прав. Но основная проблема решается следующим образом. Дополнительно, Здесь проблема в том, что когда вы представляете WCF как службу WCF с поддержкой ajax, она взаимодействует с помощью JSON. Когда вы вызываете ту же службу из кода C #, она вызывается с использованием запроса SOAP. Поэтому вам необходимо настроить службу так, чтобы она принимала запросы как JSON, так и SOAP. Итак, в разделе услуг вам нужно настроить его следующим образом

<services>
      <service name="ServiceReference1.WCFService">
          <endpoint address="" behaviorConfiguration="org.proj.WebServices.WCFServiceAspNetAjaxBehavior"
            binding="webHttpBinding" contract="org.proj.WebServices.IWCFService"  />
          <endpoint address="soapreq" behaviorConfiguration="org.proj.WebServices.MyServiceSOAPBehaviour" bindingConfiguration="BasicHttpBinding_IUpdateService"
                  binding="basicHttpBinding" contract="org.proj.WebServices.IWCFService" name="ServiceReference1.IWCFService" />
      </service>
  </services>

В разделе поведения вам нужно настроить поведение конечной точки следующим образом.

<endpointBehaviors>
          <behavior name="org.proj.WebServices.WCFServiceAspNetAjaxBehavior">
              <enableWebScript />
          </behavior>
          <behavior name="org.proj.WebServices.MyServiceSOAPBehaviour">
          </behavior>
      </endpointBehaviors>
0 голосов
/ 29 марта 2012

Проблема в том, что имя конечной точки не соответствует тому, что ищет экземпляр клиента:

<endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc" 
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFService" 
        contract="ServiceReference1.IWCFService" name="BasicHttpBinding_IWCFService" /> 

В соответствии с сообщением об ошибке ожидается, что имя также будет "ServiceReference1.IWCFService", так что вы этоконечная точка вам нужна.

<endpoint address="http://yashworkspace/BSS/WS/ServiceReference1.svc" 
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFService" 
        contract="ServiceReference1.IWCFService" name="ServiceReference1.IWCFService" /> 
...