I am working on a requirement to know what back-end service contracts are being invoked via a service wrapper (wcf service).
This is a enterprise level service platform where we have created a WCF based service which invokes different different Back-end Service contracts.
The requirement is to know which WCF Contract calls which back-end service contracts.
Related
How can I consume a WCF Data Service without adding a Service Reference.
For a normal WCF service, we use shared contracts and create proxy at runtime to call the service. Is similar concept possible in case of Data Service?
I have created a WCF service and hosted it through self hosting. This service doesn't have any metada published.
First Question
Can I consume it through Visual Studio, Add Service Reference? Hopefully not.
Can I consume it by creating manual proxy, i.e. ChannelFactory<ServiceContract>....?Hopefully yes.
Now in the second scenario, the client must be .Net, right?
So it implies that, to consume a wcf service on a non-.net platform, we have to expose its metadata?
Can't a WCF service without metadata, consume by Ajax client, or say Java client??
There are 3 options to consume a WCF Service:
If the service exposes a WSDL use "add service reference" from VS (or an equivalent from another platform). Note that if you do not want to expose the WSDL you could expose it just temporarly, save the WSDL in a file, and then send it to user in any platform to generate proxy from it. You can turn off the WSDL immediately after you save it. Also note that even if the WSDL is not exposed still you need to protect the web service from unauthorized access.
If this is a .Net client it can compile with the same Service Contract assembly and use ChannelFactory etc.
Any platform can send raw soap message (e.g. XML) to the service. Of course they need to know what is the right format. A WSDL can help but even without it if they have a working sample they can imitate it.
WCF provides REST (Representational State Transfer) support to consume it by non .NET client like JavaScript (AJAX), java, Objective C, web browser, etc...
Basically WCF REST is exposes methods and transferring data over the HTTP protocol and it supports all HTTP operations (GET, POST, PUT, and DELETE). This feature is making it platform independent as well as it doesn’t require metadata exposed.
Please refere below links to get more about WCF REST:
An Introduction To RESTful Services With WCF
WCF REST Programming Model Overview
WCF Rest vs. WCF SOAP
Create RESTful WCF Service API: Step By Step Guide
I have a callback service that is hosted over wsDualHttpBinding. I'm looking to add a client that will poll for the data rather than receive the callback (will be a mobile device using wince for demo purposes). I was curious what the best way to do this is? You cannot create a client proxy using NetCFSvcUtil with a service hosted with wsDualHttpBinding (I understand that), but you cannot host a callback service over basicHttpBinding. I really need the same service hosted over both basicaHttpBinding (clients will poll for data) and wsDualHttpBinding (callback will notify clients of data). Any ideas on the best way to handle this without creating two separate services to host the same data?
What do you mean by two separate services hosting the same data? Do you expect to share same service instance to handle both wsDualHttpBinding and basicHttpBinding requests?
Your current problem is that service interface for duplex communication cannot be used for basicHttpBinding. You have to create second service contract and implement it in the same service. In that case you can expose two endpoints for the service: one duplex with WSDualHttpBinding and one with BasicHttpBinding. Endpoints must have different relative addresses. From the perspective of the client those endpoints are separate services - each of them requires separate client proxy. So unless your service is singleton you will have new service instance for each client proxy. New service instance means no data sharing.
Thera are some possibilities to modify this behavior but it means replacing Instance provider.
Could you please tell what is the difference between a WCF client and a non-WCF client?
When I generate proxy of a WCF service using svcutil and put that in client, what is created - wcf client or non-wcf client?
When should I use WCF client and non-WCF Client?
If you have a WCF service, its services are available to potentially several types of clients - both .NET applications using WCF themselves, or other apps.
Basically, any WCF binding that start with net.... is a .NET specific binding - only other .NET apps with WCF can connect to those services and call their methods.
The bindings with basic.... or ws...... typically are interoperable, e.g. using only industry standards like SOAP and WS-* standards - those can be called from Java, Ruby, PHP - you name it. Any language/system with a SOAP stack can call such a service (provided you get the configuration right on both ends)
The webHttpBinding is another special case - it's exposing it's services over REST - which means anything with a HTTP stack (pretty much every computer system and more and more phones and devices, too) can call its methods.
As long as you are programming your stuff in .NET, always use the WCF client - it's the easiest and the best if it's available. If you need to call your WCF service from a PHP client, of course, then you have to use PHP technology and something that's compatible between the two worlds....
We currently have a Silverlight 2.0 application communicating with a set of WCF web services. These services communicate with other WCF services for business logic.
Client DMZ Intranet
Silverlight -> WCF Web Service Gateway -> WCF Biz service -> DB
The WCF web service gateway resides within the DMZ.
We see that Ria services can replace our WCF web Service gateway, but this means that it will be installed in our DMZ and have access to our database... Is this secure?
We also seem to loose our business logic WCF services... I would need to put the business logic within Ria services (as it has connection to the database and holds the domain...).
What is the recommended patter for Ria services? Where does it fit?
What is the approach for companies that already invested in WCF web services? Can they use RIA?
We are looking at this alternative, were we would expose both web services and Ria...
Silverlight -> WCF web service - > WCF biz service -> DB
-> Ria services -> DB
Any comments? I also wonder if anyone is actually using Ria in production....
Your proposal architecture with the silverlight app calling
both WCF Services and Ria services sounds fair to me.
Suppose your DB has an Employee Entity.
I can get this approach up and running, but have some issues
Suppose "the WCF biz service" accesses and modifies Employee.
does it get this data from the database directly?
(if so, is the EntityFramework edmx model shared between "the WCF biz service" and ria?)
does it in turn uses the RIA layer, and thus the EmployeeRiaProxy?
..?
Suppose you want to use the Employee Entity on your "WCF biz service" operation contract
This should not be possible in a pure SOA architecture?
Use a pure DTO data contract style approach with an EmployeeDto?
Should you use the Employee, or the EmployeeRiaProxy?
Using the Employee is not possible because the silverlight app does not know it
(or would cause another EmployeeWCFProxy type being created on the client)
Using the EmployeeRiaProxy is possible, but ties your operation contract to a
Ria proxy (pretty poor design) and assumes the service uses RIA for data access
Or should everything pass through this RIA layer? from which you call "the WCF biz service" in turn then?
Any opinions welcome!
Koen