gpt4 book ai didi

c# - 放置WCF命名空间与不放置WCF命名空间的区别?

转载 作者:行者123 更新时间:2023-12-01 19:19:18 25 4
gpt4 key购买 nike

我正在关注这个tutorial ,并且还遇到了这个article在我完成上一个教程之后。

让我好奇的是 [ServiceContractAttribute] 。我看到文章中的[ServiceContract]没有命名空间,但教程中有一个。

所以我继续将 [ServiceContract(Namespace="SandwichServices")] 更改为 [ServiceContract],但是当我运行应用程序并单击按钮时,我得到一个异常:Uncaught ReferenceError: SandwichServices is not Defined

所以我想知道,

  1. 除了恢复更改之外,还有其他方法可以解决此错误吗?也许 Web.config 就是答案,但我不确定我是否走在正确的道路上。
  2. 两个[ServiceContractAttribute]有什么区别?从我的角度来看,接口(interface)似乎不需要 Namespace,但我是对的吗?

Web.config 文件内容:

<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="SandwichServices.CostServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>

<serviceHostingEnvironment
aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />

<services>
<service name="SandwichServices.CostService">
<endpoint address=""
behaviorConfiguration="SandwichServices.CostServiceAspNetAjaxBehavior"
binding="webHttpBinding"
contract="SandwichServices.CostService" />
</service>
</services>
</system.serviceModel>

最佳答案

您是对的,您的合约定义中不需要 ServiceContractAttribute 的命名空间属性,但它默认为“http://tempuri.org ”。这用于定义 WSDL 中端口类型的命名空间。从您的问题中不清楚为什么会发生错误。

使用 urn 格式的非默认命名空间(例如 urn:companyname:servicename)是一种很好的做法(特别是对于面向外部的 API)。此外,您可以使用名称属性来进一步定义服务。

示例:

对于菜单服务

[ServiceContract(Name="menu", Namespace="urn:subway:sandwich")] 

对于订单服务

[ServiceContract(Name="order", Namespace="urn:subway:sandwich")]

等等

通常,您会将 WSDL 命名空间与代码中的 CLR 命名空间相匹配。

继续这个例子:

namespace Subway.Sandwich
{
[ServiceContract(Name="menu", Namespace="urn:subway:sandwich")]
public interface MenuService
{

}

[ServiceContract(Name="order", Namespace="urn:subway:sandwich")]
public interface OrderService
{

}
}

回答您的具体问题。

  1. 没有足够的相关信息可供了解(但可能存在配置问题)。
  2. ServiceContract 和 ServiceContractAttribute 相同,并且不需要命名空间。

关于c# - 放置WCF命名空间与不放置WCF命名空间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com