WCF Web服务组件是否必须连接到Web?

问题描述:

我正在学习有关WCF Web服务的知识,我很担心所见到的所有耦合。我看到它的方式,我应该能够编写一个组件,然后在任何地方使用它 - 在proc中,跨Intranet或从一个ASP.NET页面,只需要改变托管方式。WCF Web服务组件是否必须连接到Web?

一旦你开始与System.ServiceModel.Web虽然你开始的东西装饰你的ServiceOperations喜欢的工作:

[OperationContract] 
[WebGet] 
string EchoWithGet(string s); 

这一权利是耦合的方法到网上。你可以在一个要托管的服务中使用这样的合同吗?

和部分我期待在我的例子中我也看到类似的代码:

public class FavoriteMovieService : IFavoriteMovie 
{ 
    MyFavoriteMovie item = new MyFavoriteMovie(); 

    public MyFavoriteMovie GetItem() 
    { 
    if(item == null) 
     throw new WebProtocolException(HttpStatusCode.NotFound, "Not found.", null); 
    return item; 
    } 
} 

你不会想扔一样,在您的服务代码异常,如果你是在举办-proc,对吗?

是否仍然有很好的方法来编写WCF Web服务,并希望RESTful的那些不需要如此紧密耦合到Web?它似乎击败了WCF的全部目的。

我意识到我可能只是误解了一些东西,因为我是做这些类型的WCF服务的新手,但我很好奇。

请赐教。 :)

是的,您可以将该合同用于非网络端点。它只会使用RESTful命令,如果您使用识别此事件的端点(WebHttpBinding自.NET 3.5 sp1起)。否则,它将像任何其他数据合同一样行事。如果你使用命名管道,这将是很好的inproc。另外,使用WebHTTPBinding将彻底摧毁servicehost中任何其他端点公开元数据的能力。如果你需要这样做,你应该创建两个独立的服务主机。一个用于RESTful服务,另一个用于其他所有服务。这是几个小时的调试。

至于错误,它是一个人为的例子。我会让WCF处理所有通信级别的错误,并只抛出您可以在其他端点处理的错误。否则,返回包含您的其他端点实际可以处理的某种错误代码的消息。此外,只要异常使您的对象处于一致状态,就吃掉它,不要让通道出故障。

在相关说明中,我发现为inproc调用创建接口解析器对象更容易。它的行为(主要)像servicehost,除了我不需要客户端,我可以要求对象为我解决接口。对于inproc调用,WCF开销有点大。

+0

入门套件中的所有扩展方法等有什么意义?你可以在服务层之外使用它们吗?如果没有,那么他们不会使用它们将组件连接到网络上? – 2009-02-04 04:15:00