none
Consume a WCF Service from HTML page using https RRS feed

  • Question

  • Here is my current web.config file. I am unable to access the service via ajax calls from my 
    HTML page. It never even gets to the service code. What am I missing?

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      
        <system.web>
            <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
        </system.web>
    
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="ScormPlayerService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
      
        
      <system.serviceModel>
       <behaviors>
      <endpointBehaviors>
        <behavior name="MyServiceBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true" />
    <services>
      <service name="ScormPlayerService.Service1">
        <endpoint address="https://10.10.1.7/Service1.svc" binding="wsHttpBinding" bindingConfiguration="wsHttpsBinding" contract="ScormPlayerService.IService1"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding crossDomainScriptAccessEnabled="true"></binding>
      </webHttpBinding>
    
      <wsHttpBinding>
        <binding name="wsHttpsBinding">
          <security mode="Transport">
           </security>
        </binding>
      
      </wsHttpBinding>
    </bindings> 
        
        
               
      </system.serviceModel>
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
          </customHeaders>
        </httpProtocol>
        <modules runAllManagedModulesForAllRequests="true" />
        <!--
            To browse web app root directory during debugging, set the value below to true.
            Set to false before deployment to avoid disclosing web app folder information.
          -->
        <directoryBrowse enabled="true" />
        <handlers>
          <remove name="WebDAV"/>
          <remove name="OPTIONSVerbHandler"/>
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
         </handlers>
      </system.webServer>
    
    </configuration>
    

    Wednesday, September 16, 2015 3:30 PM

Answers

  • As it turns out, it was all in the web.config file. This is the one that makes it work.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="ScormPlayerService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
      <system.serviceModel>
        <bindings>
       
       <webHttpBinding>
        <binding name="WebHttpEndpointBinding" crossDomainScriptAccessEnabled="true">
           <security mode="Transport">
             <transport clientCredentialType="None" />
           </security>
        </binding>
      </webHttpBinding>
     
        </bindings> 
        <behaviors>
          <serviceBehaviors>
            <behavior name="service_behavior_name">
              <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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>
          <endpointBehaviors>
            <behavior name="web">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <standardEndpoints>
          <webScriptEndpoint>
            <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint>
          </webScriptEndpoint>
        </standardEndpoints>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <!--<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />-->
        <services>
          <service name="ScormPlayerService.Service1" behaviorConfiguration="service_behavior_name">
            <endpoint binding="webHttpBinding" behaviorConfiguration="web" bindingConfiguration="WebHttpEndpointBinding" contract="ScormPlayerService.IService1"></endpoint>
          </service>
        </services>
        <diagnostics>
          <messageLogging
               logEntireMessage="true"
               logMalformedMessages="false"
               logMessagesAtServiceLevel="true"
               logMessagesAtTransportLevel="false"/>
        </diagnostics>
      </system.serviceModel>
      
        <system.diagnostics>
              <sharedListeners>
          <add name="xml" type="System.Diagnostics.XmlWriterTraceListener"
               traceOutputOptions="LogicalOperationStack"
               initializeData="E:\logs\WCFTrace.svclog" />
        </sharedListeners>
        <trace autoflush="true" />
      </system.diagnostics>
    
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
          </customHeaders>
        </httpProtocol>
        <modules runAllManagedModulesForAllRequests="true" />
        <!--
            To browse web app root directory during debugging, set the value below to true.
            Set to false before deployment to avoid disclosing web app folder information.
          -->
        <directoryBrowse enabled="true" />
        <handlers>
          <remove name="WebDAV"/>
          <remove name="OPTIONSVerbHandler"/>
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    
          <!--<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />-->
        </handlers>
      </system.webServer>
    
      <!--<applicationSettings>
        <ScormPlayerService.Properties.Settings>
          <setting name="ConnectionString" serializeAs="String">
            <value>Data Source=10.10.1.193,50681; Initial Catalog = BVS_Online_Learning; User ID=BVSUser; Password=NoSoup4u</value>
          </setting>
          <setting name="SelectString" serializeAs="String">
            <value>SELECT trainingNum from [dbo].[customPages] where bankid = 'rldml' and heading = 'Exam'</value>
          </setting>
          <setting name="ContentSelect" serializeAs="String">
            <value>SELECT content from [dbo].[customPages] where bankid = 'rldml' and heading = 'Exam' and trainingNum = '{0}'</value>
          </setting>
        </ScormPlayerService.Properties.Settings>
      </applicationSettings>-->
      <applicationSettings>
        <ScormPlayerService.Properties.Settings>
          <setting name="ConnectionString" serializeAs="String">
            <value>Data Source=10.10.1.193,50681; Initial Catalog = BVS_Online_Learning; User ID=BVSUser; Password=NoSoup4u</value>
          </setting>
          <setting name="SelectString" serializeAs="String">
            <value>SELECT courseNumNew from [dbo].[COURSES] where courseNumNew &gt;0</value>
          </setting>
          <setting name="ContentSelect" serializeAs="String">
            <value>SELECT content from [dbo].[customPages] where heading = 'Exam' and trainingNum = '{0}'</value>
          </setting>
          <setting name="TopicsContent" serializeAs="String">
            <value>SELECT content from [dbo].[customPages] where lev1=95 and trainingNum = '{0}'</value>
          </setting>
          <setting name="CourseTitle" serializeAs="String">
            <value>SELECT trainingTitle, bvsCourseNum from [dbo].[customTraining] where trainingNum = '{0}'</value>
          </setting>
          <setting name="TestParams" serializeAs="String">
            <value>SELECT CourseTitle, ExamQuesNum,PCT,CourseNum from [dbo].[COURSES] where courseNumNew = '{0}'</value>
          </setting>
        </ScormPlayerService.Properties.Settings>
      </applicationSettings>
    </configuration>
    


    Friday, September 25, 2015 1:24 PM

All replies

  • Hi Steve Wisnieski,

    According to your web.config file. I suggest you need to change the   <endpointBehaviors>

    the like below:

    <endpointBehaviors>
          <behavior name="web">
            <webHttp/>
          </behavior>
        </endpointBehaviors>

    Next, may be you need to add this node as a child of servicemodel, like below:

    <standardEndpoints>
        <webScriptEndpoint>
          <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint>
        </webScriptEndpoint>
      </standardEndpoints>

    Then, you need to add this attribute in your service file, like below:

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    Note: you can use fiddler to debug your service.

    For more information, please refer to the following articles:

    #WCF REST Services Using jQuery AJAX Calls

    I hope that will be helpful to you.

    Best Regards,

    Grady


     
    Thursday, September 17, 2015 9:18 AM
    Moderator
  • Thanks Grady. I tried what you suggested, still no luck. What I'm trying to do, is from a website's HTML page, make a call via ajax,  to a WCF service on another website, and return data. I was able to make it work with just plain http, but when I went to https, it stopped working.

    Steve

    Thursday, September 17, 2015 5:31 PM
  • Thanks Grady. I tried what you suggested, still no luck. What I'm trying to do, is from a website's HTML page, make a call via ajax,  to a WCF service on another website, and return data. I was able to make it work with just plain http, but when I went to https, it stopped working.

    The site must have an HTTPS certificate issued by a HTTPS certificate provider and the service must be listing on the HTTPS port 443.

    https://en.wikipedia.org/wiki/HTTPS

    You just can't arbitrarily switch the client to use HTTPS if the service is not using HTTPS.

    Thursday, September 17, 2015 6:30 PM
  • Yes, I put all that in place. I added the https binding to my WCF Service. I have the certificate installed on the server. I am trying to access that service from another https web site.

    Steve

    Thursday, September 17, 2015 6:40 PM
  • Yes, I put all that in place. I added the https binding to my WCF Service. I have the certificate installed on the server. I am trying to access that service from another https web site.

    Steve


    And you done a check through a browser and gotten the WSDL back from the HTTPS service?
    Thursday, September 17, 2015 9:02 PM
  • And you done a check through a browser and gotten the WSDL back from the HTTPS service?

    Yes. However, if I browse the HTML page from my browser and it attempts to make a JavaScript call (via ajax) to that WCF Service, THAT fails. I have a test function that merely echoes a response, and I get a 401 error when I call that function. All of this worked just fine when doing it using plain http.
    Friday, September 18, 2015 12:34 PM
  • And you done a check through a browser and gotten the WSDL back from the HTTPS service?

    Yes. However, if I browse the HTML page from my browser and it attempts to make a JavaScript call (via ajax) to that WCF Service, THAT fails. I have a test function that merely echoes a response, and I get a 401 error when I call that function. All of this worked just fine when doing it using plain http.
    A 401 usually means the credentials being used to access resources on the Web server via  the service is being rejected at login.
    Friday, September 18, 2015 1:43 PM
  • As it turns out, it was all in the web.config file. This is the one that makes it work.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="ScormPlayerService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
      <system.serviceModel>
        <bindings>
       
       <webHttpBinding>
        <binding name="WebHttpEndpointBinding" crossDomainScriptAccessEnabled="true">
           <security mode="Transport">
             <transport clientCredentialType="None" />
           </security>
        </binding>
      </webHttpBinding>
     
        </bindings> 
        <behaviors>
          <serviceBehaviors>
            <behavior name="service_behavior_name">
              <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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>
          <endpointBehaviors>
            <behavior name="web">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <standardEndpoints>
          <webScriptEndpoint>
            <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint>
          </webScriptEndpoint>
        </standardEndpoints>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <!--<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />-->
        <services>
          <service name="ScormPlayerService.Service1" behaviorConfiguration="service_behavior_name">
            <endpoint binding="webHttpBinding" behaviorConfiguration="web" bindingConfiguration="WebHttpEndpointBinding" contract="ScormPlayerService.IService1"></endpoint>
          </service>
        </services>
        <diagnostics>
          <messageLogging
               logEntireMessage="true"
               logMalformedMessages="false"
               logMessagesAtServiceLevel="true"
               logMessagesAtTransportLevel="false"/>
        </diagnostics>
      </system.serviceModel>
      
        <system.diagnostics>
              <sharedListeners>
          <add name="xml" type="System.Diagnostics.XmlWriterTraceListener"
               traceOutputOptions="LogicalOperationStack"
               initializeData="E:\logs\WCFTrace.svclog" />
        </sharedListeners>
        <trace autoflush="true" />
      </system.diagnostics>
    
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
          </customHeaders>
        </httpProtocol>
        <modules runAllManagedModulesForAllRequests="true" />
        <!--
            To browse web app root directory during debugging, set the value below to true.
            Set to false before deployment to avoid disclosing web app folder information.
          -->
        <directoryBrowse enabled="true" />
        <handlers>
          <remove name="WebDAV"/>
          <remove name="OPTIONSVerbHandler"/>
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
          <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    
          <!--<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />-->
        </handlers>
      </system.webServer>
    
      <!--<applicationSettings>
        <ScormPlayerService.Properties.Settings>
          <setting name="ConnectionString" serializeAs="String">
            <value>Data Source=10.10.1.193,50681; Initial Catalog = BVS_Online_Learning; User ID=BVSUser; Password=NoSoup4u</value>
          </setting>
          <setting name="SelectString" serializeAs="String">
            <value>SELECT trainingNum from [dbo].[customPages] where bankid = 'rldml' and heading = 'Exam'</value>
          </setting>
          <setting name="ContentSelect" serializeAs="String">
            <value>SELECT content from [dbo].[customPages] where bankid = 'rldml' and heading = 'Exam' and trainingNum = '{0}'</value>
          </setting>
        </ScormPlayerService.Properties.Settings>
      </applicationSettings>-->
      <applicationSettings>
        <ScormPlayerService.Properties.Settings>
          <setting name="ConnectionString" serializeAs="String">
            <value>Data Source=10.10.1.193,50681; Initial Catalog = BVS_Online_Learning; User ID=BVSUser; Password=NoSoup4u</value>
          </setting>
          <setting name="SelectString" serializeAs="String">
            <value>SELECT courseNumNew from [dbo].[COURSES] where courseNumNew &gt;0</value>
          </setting>
          <setting name="ContentSelect" serializeAs="String">
            <value>SELECT content from [dbo].[customPages] where heading = 'Exam' and trainingNum = '{0}'</value>
          </setting>
          <setting name="TopicsContent" serializeAs="String">
            <value>SELECT content from [dbo].[customPages] where lev1=95 and trainingNum = '{0}'</value>
          </setting>
          <setting name="CourseTitle" serializeAs="String">
            <value>SELECT trainingTitle, bvsCourseNum from [dbo].[customTraining] where trainingNum = '{0}'</value>
          </setting>
          <setting name="TestParams" serializeAs="String">
            <value>SELECT CourseTitle, ExamQuesNum,PCT,CourseNum from [dbo].[COURSES] where courseNumNew = '{0}'</value>
          </setting>
        </ScormPlayerService.Properties.Settings>
      </applicationSettings>
    </configuration>
    


    Friday, September 25, 2015 1:24 PM
  • Yeah, it looks like a nightmare. :)
    Friday, September 25, 2015 1:58 PM