I'm learning about WCF Web Services and I'm concerned about all of the coupling that I'm seeing. The way I see it, I should be able to write a component and then use it just about anywhere - in-proc, across the intranet or from an ASP.NET page and only ever need to just change the way it's hosted.
Once you start working with System.ServiceModel.Web though you start decorating your ServiceOperations with things like:
[OperationContract]
[WebGet]
string EchoWithGet(string s);
That right there is coupling the method to the web. Can you use a contract like that in a service that's to be hosted in-proc?
And in some of the examples I'm looking at I'm also seeing code like:
public class FavoriteMovieService : IFavoriteMovie
{
MyFavoriteMovie item = new MyFavoriteMovie();
public MyFavoriteMovie GetItem()
{
if(item == null)
throw new WebProtocolException(HttpStatusCode.NotFound, "Not found.", null);
return item;
}
}
You wouldn't want to throw an exception like that in your service code if you were hosting in-proc, right??
Are there still good ways to write WCF web services, and hopefully RESTful ones that don't require such tight coupling to the web? It seems to defeat the entire purpose of WCF.
I realize that I'm probably just misunderstanding something since I'm new to doing these sorts of WCF services, but I'm curious.
Please enlighten me. :)