是什么导致Web服务URL和名称空间之间的差异?

| 我有一个包含Web服务的ASP.NET Web项目。当我运行该服务时,它使用类似于“ 0”的URL进入显示所有公开方法的页面。 在Web服务的代码中,具有以下属性的方法:
    [WebService(Namespace = \"http://webservices.example.com/GameServices/Game1\")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Game1 : System.Web.Services.WebService
    {
        // code 
    }
我对为什么带有webService属性的类中的命名空间与Web服务的路径不同感到困惑。该名称空间来自哪里?它是刚刚组成的吗?
已邀请:
是的,它组成了。 听起来很傻,但这是事实。在您的代码中指定的名称空间将在XML文档上使用,该XML文档作为对该特定Web服务的请求和响应进行交换。如果将网络跟踪程序放在网络上,则会在来回消息中看到那些名称空间字符串。在网络服务中,您的应用通常不需要与名称空间相关。 webservices库通常为您处理它。 尽管人们经常使用HTTP URL,但不需要将命名空间作为HTTP URL。这可能是造成您大部分困惑的根源。 IETF关于XML名称空间的建议建议它应该是URI,但是URI不必是HTTP URI,实际上,它不需要附加任何“网络协议”。 命名空间是一个字符串。它用作在XML模式中限定信息的简单方法。认为它像一个人的姓。您可能认识几个叫“ Chris”的人。您可以通过它们的姓氏来区分它们。 类似地,元素名称\“ id \”可以在许多不同的XML文档和模式中使用。应用程序(以及人们)可以通过其xml名称空间区分使用qname \“ id \”的许多不同元素。 通常,“信息架构师”将文档或Web服务的XML名称空间指定为URI,该URI是分层的,对于所属组织而言唯一且与XML文档中信息的含义有关。 (在小型组织中,“信息架构师”只是开发人员。)例如,http://mycompany.com/services/2013/customer可能是MyCompany的命名空间,该命名空间创建于2013年,涉及服务,尤其是客户服务。 我认为,没有真正的理由在XML名称空间的URI中使用“ 2”作为方案,除非您计划在该HTTP URI上提供文档。您也可以将urn:mycompany.com/services/2013/customer用作XML名称空间。实际上,它可能会更好,因为它表明它只是一个名称,而不是定位符。 (不是网址)。 我通常使用前缀为3的URN作为方案,以表明名称空间只是一个名称,一个单数符。 编辑 URN的结构有规定。基本格式为: 缸: ...其中NID是名称空间ID,是一组特殊的已批准字符串中的一个,而NSS是特定于名称空间的字符串。批准的NID列表包括isbn,uuid,ietf以及其他大约20种-每个ID都有不同的IETF RFC定义的特定含义。 尽管有关于NID的规定,但许多人根本不愿意遵守,而是使用域名代替NID来创建自己的URN。例如\“ mycompany.com \”。 (我经常这样做)。 然后,您可以选择如何进一步限定名称。您可以指定\“ services \”来指示Web服务。某些人使用服务在名称空间中启动的年月。这使您可以更新服务,并使用不同的日期来区分不同的元素。遵循此命名约定的示例XML名称空间可能是:
 urn:mycompany.com:services:2011:04:Game
这就是RFC 2141所称的“无效的URN”,因为我没有使用注册的NID。但这符合我的目的。通过应用由RFC 4198定义的fdc NID,将其转换为\“有效URN \”是一个简单的步骤。
 urn:fdc:mycompany.com:services:2011:04:Game
看看有什么更好的吗? 最后,大多数人只是为XML数据的内部和合作伙伴使用者建立了自己的命名约定,这对他们的使用是有意义的。
简而言之,是的,名称空间只是组成了。它们只是将一个文档与另一个文档区分开的简单方法。在名称空间中使用URL结构是最常见的,因为它们通常是唯一的。
名称空间可以是您分配的任何值。我认为使名称空间与服务URL相同被认为是最佳实践。

要回复问题请先登录注册