WCF Web Service change wsdl name and targetNamespace
All,
I'm a little new to WCF over IIS but have done some ASMX web services before. My WCF service is up a开发者_如何学Pythonnd 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?
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"....
Actually, it should be put on ServiceBehavior:
[ServiceBehavior(Namespace = "http://some.com/service/", Name = "ServiceName"]
Then WSDL name will be changed.
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>
精彩评论