Having seen the small footprint set by JSON – I’ve begun using it extensively for mobile device (WP7) communication. In particular the phone scenario makes it desirable to have an as small as possible data load to transfer between server and device. When using the JSON formatting, you can really minimize the load as documented here. Below is what is returned in JSON-format (compare that to the verbose OData or SOAP formatting!):
[{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"}]
How to do ?
To expose a WCF-implemented service with JSON support, you need to setup these artifacts:
Service Contract:
First define the contract for the service to expose.
namespace WebService1
{
[ServiceContract(Namespace="http://someethingelse.com")]
public interface IEmployeeService
{
[OperationContract]
[WebInvoke(BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat=WebMessageFormat.Json)]
Employee[] GetAll_POST();
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Employee[] GetAll_GET();
}
[DataContract(Namespace="http://somethingunique.com")]
public class Employee
{
[DataMember]
public int BirthYear { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
}
Note the WebInvoke and WebGet attributes on the service definition. The WebInvoke attribute specifies that the method will obey POST-requests, where as the WebGet attribute will make the method obey GET-requests.
The two attributes takes parameters that allows for specifying in which format the data should be formatted. When the ResponseFormat=WebMessageFormat.Json is set, the data returned by the method is formatted as a clean and simple JSON notation.
Web.config
Of-course you also need to setup configuration in the web.config. Here you should pay special attention to the binding and the behaviorConfiguration attributes.
Important: In particular the endpointBehavior should have <webHttp> set as content to gain the clean JSON formatting (see below).
<system.serviceModel>
<services>
<service name="WebService1.EmployeeService">
<endpoint name="jsonEP"
address=""
binding="webHttpBinding"
behaviorConfiguration="json"
contract="WebService1.IEmployeeService"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="json">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Client:
When calling the above service, you will receive a nicely formatted JSON string like this:
[{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"}]
That’s how easy it is setting up when using WCF.
22 comments:
great work man :-).
is there a sample code?????
i have a little problem,
If it is problematic, attempt with a very simple class (DataContract). Problems often arise in serialization areas, hence to try with a simple class (like the Person class above).
I do not have a sample for this simple construction.
So does the service need to be exposed as a web application then?
How do you test it?
Quite easy from a browser (IE will do). Just type the proper address in the browser and you will see the result in the browser rendered as text.
Can we still take advantage of security features in WCF? We have a partner that would like to pull data from a JSON-based endpoint but as it is customer data, we need it to be secure.
Thanks!
Sure - WCF is made in a pretty clever and "combination-wise" manner. Please, see here:
http://msdn.microsoft.com/en-us/library/bb924478.aspx
I have a WCF service that is sending and receiving encrypted information and the service injects characters into the stream. It escapes forward slashes, replaces plus signs with spaces and place \" in the strings.
Up until now I have been writing parsing code to overcome these issues but now IIS running on Windows 7 is having different issues than IIS running on Server 2008 R2.
Is there any way to stop this behavior?
Instead of doing manual processing of the received stream; I would first see it not the encryption algorithms/classes are able to decrypt the data into plain data? Usually, that is possible.
What type of encryption are you using for creating the data to be sent to the client?
How would one call this method using jQuery AJAX?
I would suggest that you used WebAPI2 these days. This post is fairly old and WCF is too heavy for this purpose. A lot of water has run under the bridge since this post, mate.
But something like this:
public class RootObject
{
public string ActValue { get; set; }
public string BalValue { get; set; }
public string LimitValue { get; set; }
public string RuleCategory { get; set; }
public string RuleCode { get; set; }
}
Are the DataContract and DataMember annotations required? Can I return any class? Must it be serializable?
Wonderful blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there! Appreciate it. vShare iOS 10
Nice to be visiting your blog once more, it has been months for me. Well this article that ive been waited for therefore long. i want this article to finish my assignment within the faculty, and it has same topic together with your article. Thanks, nice share. iOS 11.3 Jailbreak
Very Good and great share awesome...!!
click here button
Nice to see this information in the article.
gbwa-apk
Note the WebInvoke and WebGet properties on the administration definition. The WebInvoke trait indicates that the technique will obey POST-demands All Vendors, where as the WebGet characteristic will cause the strategy to obey GET-demands. The two qualities takes parameters that takes into account indicating in which organization the information ought to be designed All Vendors 2. At the point when the ResponseFormat=WebMessageFormat.Json is set, the information returned by the technique is arranged as a spotless and straightforward JSON documentationAll Vendors 3.
Thanks for sharing amazing post
https://smartservicingcentre.co.uk
smartservicingcentre.co.uk
https://bestcertification-exam.blogspot.com/2021/01/snowpro-core-snowpro-core-certification.html
Post a comment