Question

I have been having some problems with this for a few days now... I have designed a WCF Class Library - WebAPILibrary. It is under my solution which also contains my web project.

I now am attempting to enable a AJAX/JSON response to a search query.

In the client code examples, I see something to the effect:

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;
                      });
                  });
              });

                }

MY PROBLEM IS that, up until this point, I have been happily referencing my WCF class library in my Web Project. But, now it seems I need to create a SVC file and use it to execute my javascript AJAX/JSON calls.

MY QUESTION IS:

1) How do I create the SVC file in cooperation with my WCF class library? 2) I am not quite sure what I need to put under system.ServiceModel for my web project's web.config. Could some kind soul kindly look at what I currently have and advise me on what I need to be doing?

WEB PROJECT SYSTEM.SERVICEMODEL (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 LIBRARY SYSTEM.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>
Was it helpful?

Solution

You should never reference your WCF library in any other project. It is meant to be used as a service, not as a class library.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top