C# 您能告诉我这种结构(ASP.NET中的服务和接口)背后的原因吗?

C# 您能告诉我这种结构(ASP.NET中的服务和接口)背后的原因吗?,c#,asp.net,wcf,interface,service,C#,Asp.net,Wcf,Interface,Service,我对Web/WCF/Services还不熟悉-请耐心听我说:) 我试图分析.NET应用程序中的代码流,但在公开服务时,我很难理解使用以下方法背后的原因: 现在,在应用程序中,我有一个C#Class Lib Proj,它有一个名为“XXX.YYY.Services”的C#类库项目,其中有两个文件: ISomeServiceProviderClass.cs SomeServiceProviderClass.cs 在ISomeServiceProviderClass.cs中,我的代码结构如下: [S

我对Web/WCF/Services还不熟悉-请耐心听我说:)

我试图分析.NET应用程序中的代码流,但在公开服务时,我很难理解使用以下方法背后的原因:

现在,在应用程序中,我有一个C#Class Lib Proj,它有一个名为“XXX.YYY.Services”的C#类库项目,其中有两个文件:

ISomeServiceProviderClass.cs SomeServiceProviderClass.cs

在ISomeServiceProviderClass.cs中,我的代码结构如下:

 [ServiceContract]
    public interface ISomeServiceProviderClass
    {
        [OperationContract]
        int SomeFunc();
    }
然后是 SomeServiceProviderClass.cs类,其定义如下:

public class SomeServiceProviderClass: ISomeServiceProviderClass
{
    public int  SomeFunc()
    {

        /// some code to do the implementation..
    } 
}
这是我的提供者应用程序中的一个示例服务结构。显然,消费者应用程序正在使用此服务在其UI层中显示结果

现在我想知道,有什么需要有一个名为isomfile.cs的接口,然后是实现这个接口的SomeFile.cs

我猜想其中一个原因可能是在实现这个接口的每个类中允许不同类型的实现。。。
如果是这样的话,那么为什么不创建一个SomeServiceClass.cs文件,其中包含可以在派生类中重写的虚拟函数?或者,为什么不使用带有抽象函数的抽象类呢

线索在
[ServiceContract]
[OperationContract]
属性中的
ISomeServiceProviderClas
s。这表明
IsomeServiceProviderClass
正在定义WCF服务合约

该契约(即接口)可以通过服务器端的代码来实现,以执行实际操作;在客户端,它由WCF动态实现,以创建一个代理,通过网络将调用中继到服务器


在这种情况下,您不希望使用抽象类,因为这样会限制服务器端和客户端对象的实现自由。

在服务中,
ISomeServiceProviderClass
SomeServiceProviderClass
源代码实现。但是,在客户端上,
ISomeServiceProviderClass
由处理与服务通信的WCF通道类实现


通过显式接口不是实现这种透明通信的唯一方式,但它是迄今为止最简单、最干净的方法。

该模式称为“契约优先”,用于显式地将代码契约(您可以认为是真实的)与实现分离。Web服务基于WSDL契约,它基本上是该契约的XML表示

哦。好的…在客户端,创建了一个代理类..这个代理类将拥有所有带有“[OperationContract]”属性的函数,对吗?代理类中这些函数/方法的实现情况如何?代理类是否仅包含接口中的定义,还是还包含SomeServiceProviderClass.cs中的实现?顺便说一句,感谢您的回复:)它包含一些实现,但在SomeServiceProviderClass中没有类似的实现。正如我所说,WCF动态生成代码,该代码接受在接口上调用方法时给出的参数,并通过网络将它们传递给server.Ok。我想我现在明白多了。谢谢大家!