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>
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.