YZlat
asked on
Changing schemaLocation in WSDL
I have a WCF Service which I need to host on an old IIS 6 server. The server has a name Server1 but also has an alias used for the website. Apparently the server and the website resolve to different IP addresses.
So WCF Service path is
But when I look at xml generates, the schemaLocation shows up as:
If I try accessing the schema specified in the xml
I get "Page cannot be displayed" error, and if I use Network tab in Chrome debug tools, it shows the call has been aborted. But if I try accessing the schema at
Then I can get to it without a problem but, unfortunately this is not the one used by the service.
To change that I added httpsGetURL in my config file:
that caused error: "A registration already exists for URI"
which I was able to get rid of by adding "/mex" after ".svc". The strange thing is that I do not have mex endpoint since I cannot use it due to disabled anonymous authentication.
But adding "/mex" caused another error "The message with To 'https://alias.sys.domain.com/ProjectName/MyService.svc/mex?wsdl'
cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher.
Check that the sender and receiver's EndpointAddresses agree."
So then I added address to my endpoint, changing it from
to
and tried using
that changed my error to
Can anyone help?
So WCF Service path is
https://alias.sys.domain.com/ProjectName/MyService.svc?wsdl
But when I look at xml generates, the schemaLocation shows up as:
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="https://server1.subdomain.domain.com/ProjectName/MyService.svc?xsd=xsd0" namespace="http://tempuri.org/" />
<xsd:import schemaLocation="https://server1.subdomain.domain.com/ProjectName/MyService.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/ProjectName" />
<xsd:import schemaLocation="https://server1.subdomain.domain.com/ProjectName/MyService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
</xsd:schema>
</wsdl:types>
If I try accessing the schema specified in the xml
https://server1.subdomain.domain.com/ProjectName/MyService.svc?xsd=xsd0
I get "Page cannot be displayed" error, and if I use Network tab in Chrome debug tools, it shows the call has been aborted. But if I try accessing the schema at
https://alias.sys.domain.com/ProjectName/MyService.svc?xsd=xsd0
Then I can get to it without a problem but, unfortunately this is not the one used by the service.
To change that I added httpsGetURL in my config file:
<serviceMetadata httpGetEnabled="true" httpsGetUrl="https://alias.sys.domain.com/ProjectName/MyService.svc" />
that caused error: "A registration already exists for URI"
which I was able to get rid of by adding "/mex" after ".svc". The strange thing is that I do not have mex endpoint since I cannot use it due to disabled anonymous authentication.
But adding "/mex" caused another error "The message with To 'https://alias.sys.domain.com/ProjectName/MyService.svc/mex?wsdl'
cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher.
Check that the sender and receiver's EndpointAddresses agree."
So then I added address to my endpoint, changing it from
<endpoint address="" binding="webHttpBinding" bindingConfiguration="webBinding" contract="Projectname.IMyService"/>
to
<endpoint address="web1" binding="webHttpBinding" bindingConfiguration="webBinding" contract="Projectname.IMyService"/>
and tried using
https://alias.sys.domain.com/ProjectName/MyService.svc/web1
that changed my error to
The message with Action '' cannot be processed at the receiver, due to a ContractFilter
mismatch at the EndpointDispatcher. This may be because of either a contract mismatch
(mismatched Actions between sender and receiver) or a binding/security mismatch between
the sender and the receiver. Check that sender and receiver have the same contract and
the same binding (including security requirements, e.g. Message, Transport, None)
Can anyone help?
The schemaLocation is determined by your endpoint configuration. But as you're using WebHttpBinding in your config, you're working with a RESTful web service. In this case the WSDL has no meaning, cause it is only for SOAP web services.
ASKER
@theo kouwenhoven, the problem is not that it is important or unimportant, I was trying to add a service reference to this service from Visual studio and it failed due to invalid value in schemaLocation.
I tried calling it from SOAP UI, created a new project but it failed loading with error:
I tried calling it from SOAP UI, created a new project but it failed loading with error:
Error loading 'https://alias.sys.domain.com/ProjectName/MyService.svc?wsdl' org.apache.xmlbeans.XmlException: does not close tag
ASKER
@ste5an, should I use basicHttpBinding instead?
When it is a RESTful service, then you don't use a WSDL and you don't use the Add service reference menu in VS. You simply use HttpClient or WebClient to send post or get requests to it.
But just to be sure, what your problem is:
You said WCF service, do you mean a SOAP or a RESTful web service?
Have you checked the compatibility of your WCF services used target framework and IIS6? I'm not sure that IIS6 can handle the new ones.
Why do you think the alias is a problem?
How have you configured the alias? And how the web service?
But just to be sure, what your problem is:
You said WCF service, do you mean a SOAP or a RESTful web service?
Have you checked the compatibility of your WCF services used target framework and IIS6? I'm not sure that IIS6 can handle the new ones.
Why do you think the alias is a problem?
How have you configured the alias? And how the web service?
ASKER
SOAP.
The server is an old Windows 2003 server, the server and web site have different IP addresses. I did not setup the server and all I know is that the service url is:
https://alias.sys.domain.com/ProjectName/MyService.svc
and
somehow https://servername.subdomain.domain.com/ProjectName/MyService.svc somehow get into the xml produced by wsdl
The server is an old Windows 2003 server, the server and web site have different IP addresses. I did not setup the server and all I know is that the service url is:
https://alias.sys.domain.com/ProjectName/MyService.svc
and
somehow https://servername.subdomain.domain.com/ProjectName/MyService.svc somehow get into the xml produced by wsdl
Then the problem is the setup. Your service must run separated from your web site. I guess they share currently the same root.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
solved it myself
The space name isn't that important within the WSDL.
Just Install SoapUI (free soap test suit) and create there a Project for your WSDL.
Then you can see in detail what the WSDL is exactly doing