Click here to Skip to main content
15,885,546 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi
i've created a simple WCF service hosted by a console application. i am able to view its metadata and use it, but whenever i switch to transport - it is not seen anymore - not the service and not the meta data page.

i've followed the article in here to generate a server side certificate:


[^]

i am starting the service with this code (the certificate has no password):

Uri a = new Uri("https://localhost:8813");
Uri[] baseAddresses = new Uri[] { a };
ServiceHost host = new ServiceHost(typeof(DataExchangeServer), baseAddresses);
X509Certificate2 certificate = new X509Certificate2(@"D:\test.pfx", string.Empty);
host.Credentials.ServiceCertificate.Certificate = certificate;
host.Open();

My app.config file (serviceModel section only):

XML
<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="DataExchangeServiceBehavior">
        <serviceMetadata httpsGetEnabled="true"/>
        <!--   <serviceMetadata httpGetEnabled="True"/>-->
      <serviceDebug includeExceptionDetailInFaults="true"/>
        <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000"/>
        <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="DataExchangeServiceBehavior" name="ThundenKore.Cloud.DataExchange.Server.DataExchangeServer">

      <endpoint address="/DataExchangeServices" binding="basicHttpBinding" bindingConfiguration="httpsBinding" contract="ThundenKore.Cloud.DataExchange.Server.IDataExchangeServer">
        <identity>
          <dns value="Transport"/>
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
      <!--        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>-->

    </service>
  </services>
  <bindings>
    <basicHttpBinding>
      <binding name="httpsBinding" transferMode="Buffered" messageEncoding="Mtom" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxReceivedMessageSize="524288000" maxBufferSize="524288000">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        <security mode="Transport"/>
      </binding>
    </basicHttpBinding>
  </bindings>
</system.serviceModel>


running the service like this starts it, but i cannot access it. if i change the starting code to:

Uri a = new Uri("http://localhost:8813");
Uri[] baseAddresses = new Uri[] { a };
ServiceHost host = new ServiceHost(typeof(DataExchangeServer), baseAddresses);
host.Open();

and the app.config file to:

XML
<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DataExchangeServiceBehavior">
          <!--   <serviceMetadata httpsGetEnabled="true"/>-->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="DataExchangeServiceBehavior" name="ThundenKore.Cloud.DataExchange.Server.DataExchangeServer">

        <endpoint address="/DataExchangeServices" binding="basicHttpBinding" bindingConfiguration="httpsBinding" contract="ThundenKore.Cloud.DataExchange.Server.IDataExchangeServer">
          <identity>
            <dns value="Transport"/>
          </identity>
        </endpoint>
        <!--        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>-->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="httpsBinding" transferMode="Buffered" messageEncoding="Mtom" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxReceivedMessageSize="524288000" maxBufferSize="524288000">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <security mode="None"/>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>



everythig is working fine (with disabling transport security mode).
Anyone has an idea why?

using trace viewer i can see that everything is fine when i run the service - i get:

Listen at 'https://localhost:8813/DataExchangeServices'
Listen at 'https://localhost:8813/mex'
Listen at 'https://localhost:8813/'

but using a browser or trying to add service reference using each of these addresses does not work.
i generated the certificate using:

makecert -r -pe -n "CN=Test Server" -b 01/01/2012 -e 01/01/2015 -sky exchange Test.cer -sv Test.pvk
pvk2pfx.exe -pvk Test.pvk -spc Test.cer -pfx Test.pfx
Posted
Updated 2-Jun-12 3:54am
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900