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

标签 c# asp.net wcf

我正在关注这个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/

相关文章:

c# - 使用反射获取 T 的类型名称

c# - 应用程序在虚拟应用程序 (IIS) 中运行时缺少程序集引用

wcf - 通过互联网访问 WCF 服务?

wcf - Windows 上的 X.509 证书入门

c# - 如何处理使用(Py.GIL()) block pythonnet中的异常

c# - 如何控制面板内文本框的焦点顺序?

c# - WPF ComboBox 忽略 ItemsSource 对象上的 ToString 覆盖

c# - 如何在 Asp.net C# 代码中删除之前在 JavaScript 弹出窗口中添加记录名称

asp.net - 智能卡身份验证 ASP.NET

Android - 到 .NET WCF 服务的 Https 连接给出 SSLException : "No peer certificate"