Search code examples
c#.netwcfwcf-bindingwcf-client

WCF Endpoint Address in VS 2010


I have a simple web service. This is consumed in a website using VS 2010. I added the service reference using “Add Service Reference” option in VS 2010. It works fine. It prints the service address as http://localhost:3187/Service1.svc/MyFolder. But when I type this service address in a browser it says HTTP Error 400.

Note: When I replace the address="MyFolder" with address="" in service’s end point, http://localhost:3187/Service1.svc shows the result.

What is the correct address that I should type in the browser to get the service with “MyFolder” in address?

The page:

namespace ClientWebApp
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
        Service1Client myClientService = new Service1Client();
        Response.Write(myClientService.Endpoint.Address);

        string result = myClientService.GetData(7);
        lblName.Text = result;
    }
  }
}

The contract:

namespace MyWCFServiceApplication
{
  [ServiceContract]
  public interface IService1
  {
    [OperationContract]
    string GetData(int value);
  }

  public class MyService : IService1
  {
    public string GetData(int value)
    {
        return string.Format("Now entered:  {0}", value);
    }
  }
}

The configuration:

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.serviceModel>

    <services>
      <service name="MyWCFServiceApplication.MyService"
               behaviorConfiguration="WeatherServiceBehavior">

        <endpoint address="MyFolder"
                  binding="wsHttpBinding"
                  contract="MyWCFServiceApplication.IService1" />

        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="WeatherServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

Solution

  • Please take a look at the answer to this question: WCF Endpoints & Binding Configuration Issues

    Quote:

    When hosting a WCF service in IIS, the base address of the service is formed using the following format: {protocol}://{host}:{port}/{applicationName}/{svcFileName}. This is the address you can browse to get the WCF help page and/or the metadata (on a default configuration).

    To form the actual address of the endpoint (the one your client needs to use), the following format is used: {serviceBaseAddress}/{endpointAddress}

    In your case the {endpointAddress} is MyFolder which explains why you're able to add service reference using http://localhost:3187/Service1.svc/MyFolder address. However this is not the address where your help page and metadata info gets rendered so the fact that you get HTTP Error 400 on http://.../*.svc/MyFolder is no surprise.