Search code examples
c#wpfwcfwcf-hosting

Error in deploying WCF service on WPF application


I am working on WCF application, starting simple HelloWorld service. I have develop simple WPF application to host services, i.e. start and stop service

when I try to test this service with url "http://localhost:8087/MyServices/HelloWorldService" on WCFTestClient, I am getting following error

Error: Cannot obtain Metadata from http://localhost:8087/MyServices/HelloWorldService If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.  For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error    URI: http://localhost:8087/CreditUnionServices/HelloWorldService    Metadata contains a reference that cannot be resolved: 'http://localhost:8087/CreditUnionServices/HelloWorldService'.    <?xml version="1.0" encoding="utf-16"?><Fault xmlns="http://www.w3.org/2003/05/soap-envelope"><Code><Value>Sender</Value><Subcode><Value xmlns:a="http://schemas.xmlsoap.org/ws/2005/02/sc">a:BadContextToken</Value></Subcode></Code><Reason><Text xml:lang="en-GB">The message could not be processed. This is most likely because the action 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Get' is incorrect or because the message contains an invalid or expired security context token or because there is a mismatch between bindings. The security context token would be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.</Text></Reason></Fault>HTTP GET Error    URI: http://localhost:8087/CreditUnionServices/HelloWorldService    There was an error downloading 'http://localhost:8087/CreditUnionServices/HelloWorldService'.    The request failed with HTTP status 400: Bad Request.

app.config

 <system.serviceModel>
<services>
  <service name="App.Services.Managers.HelloWorldManager">
    <endpoint address="HelloWorldService"
              binding="wsHttpBinding"
              contract="App.Services.Contracts.IHelloWorldService">
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8087/MyService"/>
      </baseAddresses>
    </host>
  </service>
</services>

C# class to open and close service

public class ServicesHostManager
{
    ServiceHost _helloWorldServicesHost = new ServiceHost(typeof(HelloWorldManager));

    public void ProcessHelloWorldService(string _process)
    {
        if(!string.IsNullOrEmpty(_process))
        {
            try
            {
                if (_process.Equals("open_service"))
                {
                    _helloWorldServicesHost.Open();
                }
                else if (_process.Equals("close_service"))
                {
                    _helloWorldServicesHost.Close();
                }
            }
            catch (Exception e)
            {
                System.Windows.MessageBox.Show(e.ToString());
            }
        }
    }

Solution

  • I have update code and is working now,

     <system.serviceModel>
    <services>
      <service name="App.Services.Managers.HelloWorldManager" behaviorConfiguration="DefaultServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8087/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="HelloWorldService" binding="wsHttpBinding" contract="App.Services.Contracts.IHelloWorldService"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultServiceBehavior">
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>