Нужна помощь со службами WCF с поддержкой AJAX (смотрите @ System.ServiceModel в Web.Config) - PullRequest
1 голос
/ 04 августа 2009

У меня были некоторые проблемы с этим в течение нескольких дней ... Я разработал библиотеку классов WCF - WebAPILibrary. Это под моим решение, которое также содержит мой веб-проект.

Сейчас я пытаюсь включить ответ AJAX / JSON на поисковый запрос.

В примерах кода клиента я вижу что-то такое:

function btnsrch_onclick() {

                var query = document.getElementById('q'); 
                var type = document.getElementById('type');

              $(document).ready(function(){
                  $.getJSON("http://api.domain.com/services/trade.svc?q=" + query.value + "&type=" + type.value + "&format=json",
                      function(data){
                          $.each(data.items, function(i,item){
                          $("<img/>").attr("src", item.media.m).appendTo("#images");
                              if ( i == 3 ) return false;
                      });
                  });
              });

                }

МОЯ ПРОБЛЕМА о том, что до этого момента я с радостью обращался к своей библиотеке классов WCF в своем веб-проекте. Но теперь, похоже, мне нужно создать файл SVC и использовать его для выполнить мои вызовы JavaScript AJAX / JSON.

МОЙ ВОПРОС:

1) Как создать файл SVC в сотрудничестве с моей библиотекой классов WCF? 2) Я не совсем уверен, что мне нужно поместить в system.ServiceModel для моего веб-проекта web.config. Может ли какая-то добрая душа любезно посмотреть на то, что у меня сейчас есть, и посоветовать что мне нужно делать?

СИСТЕМА ВЕБ-ПРОЕКТА. ОБСЛУЖИВАНИЕ (WEB.CONFIG):

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ITradeService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" establishSecurityContext="true" />
          </security>
        </binding>
        <binding name="WSHttpBinding_IAuthService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" establishSecurityContext="true" />
          </security>
        </binding>
        <binding name="WSHttpBinding_IAuthService1" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" establishSecurityContext="true" />
          </security>
        </binding>
        <binding name="WSHttpBinding_ITradeService1" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" establishSecurityContext="true" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8731/Design_Time_Addresses/Trade/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITradeService"
        contract="ITradeService" name="WSHttpBinding_ITradeService">
        <identity>
          <dns value="localhost:8731" />
        </identity>
      </endpoint>
      <endpoint address="http://localhost:8731/Design_Time_Addresses/Authentication/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAuthService"
        contract="IAuthService" name="WSHttpBinding_IAuthService">
        <identity>
          <dns value="localhost:8731" />
        </identity>
      </endpoint>
      <endpoint address="http://localhost:8731/Design_Time_Addresses/Authentication/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAuthService1"
        contract="Trezoro.WebAPI.Authentication.IAuthService" name="WSHttpBinding_IAuthService1">
        <identity>
          <dns value="localhost:8731" />
        </identity>
      </endpoint>
      <endpoint address="http://localhost:8731/Design_Time_Addresses/Trade/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITradeService1"
        contract="Trezoro.WebAPI.Trade.ITradeService" name="WSHttpBinding_ITradeService1">
        <identity>
          <dns value="localhost:8731" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

СИСТЕМА БИБЛИОТЕКИ WCF CLASS.SERVICEMODEL (APP.CONFIG):

   <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <services>
          <service behaviorConfiguration="WebAPILibrary.WebAPIBehavior"
            name="Company.WebAPI.Trade.TradeService">
            <endpoint address="" binding="wsHttpBinding" contract="Company.WebAPI.Trade.ITradeService">
              <identity>
                <dns value="localhost:8731" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8731/Design_Time_Addresses/Trade/" />
              </baseAddresses>
            </host>
          </service>
          <service behaviorConfiguration="WebAPILibrary.WebAPIBehavior"
            name="Company.WebAPI.Authentication.AuthService">
            <endpoint address="" binding="wsHttpBinding" contract="Company.WebAPI.Authentication.IAuthService">
              <identity>
                <dns value="localhost:8731" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8731/Design_Time_Addresses/Authentication/" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <endpointBehaviors>
            <behavior name="WebAPILibrary.WebAPIBehavior">
              <enableWebScript/>
            </behavior>
          </endpointBehaviors>
          <serviceBehaviors>
            <behavior name="WebAPILibrary.WebAPIBehavior">
              <!-- To avoid disclosing metadata information, 
              set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpGetEnabled="True"/>
              <!-- To receive exception details in faults for debugging purposes, 
              set the value below to true.  Set to false before deployment 
              to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="True" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>

1 Ответ

1 голос
/ 04 августа 2009

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

...