15
votes

All,

I'm a little new to WCF over IIS but have done some ASMX web services before. My WCF service is up and running but the helper page generated by the web service for me has the default names, i.e. the page that says:

You have created a service.

To test this service, you will need to create a client and use it to call the service. You can do this using the svcutil.exe tool from the command line with the following syntax:

svcutil.exe http://localhost:53456/ServicesHost.svc?wsdl

In a standard ASMX site I would use method/class attributes to give the web service a name and a namespace. When I click on the link the WSDL has:

<wsdl:definitions name="SearchServices" targetNamespace="http://tempuri.org/" 

i.e. not the WCF Service Contract Name and Namespace from my Interface. I assume the MEX is using some kind of default settings but I'd like to change them to be the correct names. How can I do this?

3

3 Answers

38
votes

Add this to your service contract

[ServiceContract(Namespace = "http://some.com/service/", Name = "ServiceName")]

Add this to your service implementation

[ServiceBehavior(Namespace = "http://some.com/service/")]

Add this to your web.config

<endpoint binding="basicHttpBinding" bindingNamespace="http://myservice.com"....
5
votes

Actually, it should be put on ServiceBehavior:

[ServiceBehavior(Namespace = "http://some.com/service/", Name = "ServiceName"]

Then WSDL name will be changed.

0
votes

Addition to @neolei, I used this to adjust the default service name and port name of an web service to adapt it to an existing integration.

[ServiceBehavior(Name = "MyServiceName")]
public class MyServiceClass : IServiceContract
{
   //other code
}

Resulting WSDL:

<wsdl:service name="MyServiceName">
  <wsdl:port name="MyServiceClass" binding="tns:MyServiceClass">
    <soap:address location="http://localhost:52233/MyService.svc"/>
  </wsdl:port>
</wsdl:service>