合同名称与命名空间名称相同,这是一件大事

本文关键字:一件 命名空间 合同 | 更新日期: 2023-09-27 18:28:28

对解决方案、命名空间和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.Firuits"

"name"属性无效-根据其数据类型"serviceNameType",值"Fruits.Internal.WebServices.Firuits"无效-枚举约束失败。

服务代码

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

合同名称与命名空间名称相同,这是一件大事

通常认为将类命名为与命名空间相同的名称不是一种好的做法——首先,由于编译器无法区分命名空间和类之间的区别,您最终不得不更频繁地在代码中限定类。

此外,你可能需要考虑命名的意义,并根据事物的功能命名。然而,我知道你上面的例子是人为的,例如:

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);
    }
}