合同名称与命名空间名称相同,这是一个大问题?

时间:2014-10-30 09:48:07

标签: c# wcf

在解决方案,命名空间和WCF服务中使用相同名称是否很重要?

这是我的项目结构,

Solution Fruits (7 projects)
  Fruits.Project1
  Fruits.Project2
  ....
  Fruits.Internal.WebServices
   IFruits.cs
   Fruits.cs

web.config

的web.config

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Fruits.Internal.WebServices.FruitsJuicer" behaviorConfiguration="myBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="Fruits.Internal.WebServices.IFruitsJuicer" bindingConfiguration="tooty_BasicHttpBinding"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
      </service>
    </services>

    <bindings>  and so on....


  <service name="Fruits.Internal.WebServices.Fruits" 

在浏览器中我收到此错误

在服务'Fruits'实施的合同列表中找不到合同名称'Fruits.Internal.WebServices.Fruits'。

'name'属性无效 - 值'Fruits.Internal.WebServices.Fruits'根据其数据类型'serviceNameType'无效 - Enumeration约束失败。

服务代码

namespace Fruits.Internal.WebServices
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class FruitsJuicer
    {
        public void GetFruitJuice(Details d)
        {
            typedDataAccess da = new typedDataAccess();
            da.AddRequest(d);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

将类命名为与命名空间相同通常不被认为是一种好的做法 - 因为编译器无法区分命名空间和类之间的差异,因此最多必须更频繁地在代码中限定类。

此外,您可能想要考虑您的命名感并根据其功能命名。我知道你上面的例子是设计的,例如:

Solution Fruits (7 projects)
  Fruits.Project1
  Fruits.Project2
  ....
  Fruits.Internal.WebServices
   IFruitJuicer.cs
   FruitJuicer.cs  //Methods for juicing fruits.  
                   //Just calling it Fruits is a bit generic.

要真正回答您的初始问题,您的班级(Fruits)不会实现您的界面(IFruits)。像这样改变:

public class FruitsJuicer :IFruits
{
    public void GetFruitJuice(Details d)
    {
        typedDataAccess da = new typedDataAccess();
        da.AddRequest(d);
    }
}