合同名称与命名空间名称相同,这是一件大事
本文关键字:一件 命名空间 合同 | 更新日期: 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);
}
}