“Duplicate file name” for same WSDL namespace when using web-service from different sub-domains

后端 未结 4 693
無奈伤痛
無奈伤痛 2021-01-25 03:39

Preface

We are providing customers with our service API.

Each customer has own subdomain (e.g. sergii.ourwebsite.com) and own WSDL URL, it look

相关标签:
4条回答
  • 2021-01-25 04:14

    There is a namespace attribute for the cfcomponent tag. You should be able to use this, along with cgi.host_name (? I'm at home, without docs) to specify a namespace that matches the subdomain being queried.

    Something like:

    <cfcomponent namespace="http://#cgi.host_name#/api/v1n1/bsapi.cfc">
    
    0 讨论(0)
  • 2021-01-25 04:19

    I can not "place the WSDL at a common URL for all customers" for now and I've explained why: because I have to use the sub-domains. If you know the way to put the WSDL at one URL and make service requests to another -- please tell me.

    A WSDL is just an XML document that describes the web service. You can write (customize) it using CFML. For instance:

    http://subdomain.domain.com/api/wsdl.cfm?api=bsapi&customer=subdomain

    Then just copy the WSDL generated by CF, and use it as a template for your custom WSDL page. Replace the parts of the WSDL that are subdomain-specific and return the XML document. Be mindful of whitespace (perhaps see CFSilent, CFSetting), and consider using CFHeader to set the mime type to "text/xml".

    0 讨论(0)
  • 2021-01-25 04:33

    Do all the customers use the same WSDL? Then place the WSDL at a common URL for all customers.

    I also think you need to find out exactly what the error message means. I don't see where it has anything to do with the URL being used. If it had mentioned the URL of another customer, I'd have understood.


    Part of this may be due to my lack of understanding of how CF works. In particular, what is this "registering web services" that triggers the problem when two customers do it?

    Did you realize that the URL in the <soap:address/> element in the WSDL is only a hint? In many clients, it can be overridden. In a .NET client, just set the Url property of the proxy class. This should allow you to have a single WSDL at a single location, and yet have your customers each reference the proper subdomain, assuming there's some way to convey that information to them. For instance, if there is a way for you to know which customer is making the call, then perhaps you could receive calls on one URL and then redirect to the proper URL, or else use a SOAP Routing infrastructure to route to the correct one.

    I hope you are not changing the namespaces from one customer to another. Namespaces have nothing to do with URLs, even if they happen to look like URLs.

    0 讨论(0)
  • 2021-01-25 04:36

    Have caught this error message when tried to CFINVOKE webservice from localhost by test script located on same localhost (but in different folder). Sounds 'buggish' for me.

    0 讨论(0)
提交回复
热议问题