views:

520

answers:

1

I've been learning and building JSONP Web services using WCF on fx3.5. You can read some of the trials I had at http://stackoverflow.com/questions/1903022/net-asmx-returning-pure-json. I finally got a sample running but now I am I am dove tailing it into my app.

RivWorks.Web - the web site - located at http://dev.rivworks.com RivWorks.Web.Service - the new JSONP services - located in http://dev.rivworks.com/services - the web.config for the services reside here.

The web.config for the service:

<!-- WCF configuration -->
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="JsonpServiceBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <services>
      <service name="RivWorks.Web.Service.CustomerService">
        <endpoint address=""
                  binding="customBinding"
                  bindingConfiguration="jsonpBinding"
                  behaviorConfiguration="JsonpServiceBehavior"
                  contract="RivWorks.Web.Service.ICustomerService" />
      </service>
      <service name="RivWorks.Web.Service.NegotiateService">
          <endpoint address=""
                  binding="customBinding"
                  bindingConfiguration="jsonpBinding"
                  behaviorConfiguration="JsonpServiceBehavior"
                  contract="RivWorks.Web.Service.INegotiateService" />
      </service>
    </services>

    <bindings>
      <customBinding>
        <binding name="jsonpBinding" >
          <jsonpMessageEncoding />
          <httpTransport manualAddressing="true"/>
        </binding>
      </customBinding>
    </bindings>    
    <extensions>
      <bindingElementExtensions>
        <add name="jsonpMessageEncoding"
             type="RivWorks.Web.Service.JSONP.JsonpBindingExtension
                 , RivWorks.Web.Service
                 , Version=1.0.0.0
                 , Culture=neutral
                 , PublicKeyToken=null"/>
      </bindingElementExtensions>
    </extensions>
  </system.serviceModel>

I am getting the following error and I've tried everything I can think of to fix it. Found a few typos (Sevice instead of Service) sprinkled throughout my code. I am using the sample code found at http://msdn.microsoft.com/en-us/library/cc716898.aspx. Here is the error:


Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: The type 'RivWorks.Web.Service.JSONP.JsonpBindingExtension , RivWorks.Web.Service , Version=1.0.0.0 , Culture=neutral , PublicKeyToken=null' registered for extension 'jsonpMessageEncoding' could not be loaded.

Source Error:

Line 58: <customBinding>
Line 59: <binding name="jsonpBinding" >
Line 60: <jsonpMessageEncoding />
Line 61: <httpTransport manualAddressing="true"/>
Line 62: </binding>

Source File: C:\RivWorks\dev\services\web.config Line: 60

Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.3082


Does anyone have any ideas on what else I can check? There is a DLL called RivWorks.Web.Service.dll, it is being built and copied to the web site's bin directory. The services web.config is being copied to the web site's Services directory. I don't have anything conflicting in the web site's web.config. I've checked all spelling problems. Any help is appreciated!

-kb

A: 

Is the dll (RivWorks.Web.Service.dll) in the build output?

Next, try (for the "jsonpMessageEncoding" extension):

type="RivWorks.Web.Service.JSONP.JsonpBindingExtension, RivWorks.Web.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

Note the different spacing both in terms of " , " and carriage returns.

After that, I would treble check the string. Write a console exe that references the dll you need (RivWorks.Web.Service), and output:

Console.WriteLine(
     typeof(RivWorks.Web.Service.JSONP.JsonpBindingExtension)
     .AssemblyQualifiedName);

That is the string you want in the xml, verbatim. Don't include any extra whitespace in this string.

Marc Gravell
Ran the console app and the string came back exactly like I have it. Captured it in a string var, inspected it, copied it, pasted it into my services web.config and still the same error. Other thoughts?
Keith Barrows
And yes, the DLL is in the build output. I use BeyondCompare to move from my local machine project area to my localhost directory. Also, from there it goes to the Dev directory on the Dev server (via BeyondCompare). I check each step of the way and I can see the newest build each time.
Keith Barrows
I tried having it all on one line like you show and it made no difference. :(
Keith Barrows
Keith Barrows
After renaming the Class and stripping extra white space out it is finally working. Mayhaps something stuck in IIS cache. WIll investigate that tomorrow. Thanks for the pointers!
Keith Barrows