Friday, January 6, 2017

WCF Configuration for Response in JSON Format

Below is a simple example of WCF that returns data in JSON format.

  • When using UriTemplate in WebInvoke attribute, all parameters should be of string type.
  • In the web.config, don't forget to add serviceBehavior and endpointBehavior. 
  • The endpointBehavior needs to have <webHttp /> and not <enableWebScript />.
  • When using WCF for Ajax client (i.e., $.ajax()), keep in mind that Ajax client only knows "GET" and "POST" and not "PUT" or "DELETE".

IService2.cs
[OperationContract]
[WebInvoke(Method ="GET", 
   UriTemplate = "/CategoryName/{id}", 
   ResponseFormat = WebMessageFormat.Json, 
   RequestFormat =WebMessageFormat.Json)]
string GetCategoryName(string id);

Service2.svc.cs
public class Service2 : IService2
  public string GetCategoryName(string id)
  {
     string retVal = "NotFound";
     int categoryID = Convert.ToInt32(id);
     using (NorthwindEntities db = new NorthwindEntities())
     {                
        var category = db.Categories.Find(categoryID);
        if(category != null)
        {
           retVal = category.CategoryName;
        }
     }
     return string.Format("Category with ID {0} is {1}.", categoryID, retVal);
   }
}

web.config
<span class="pln">
</span><span class="tag">&lt;system</span><span class="pln"> .</span><span class="atn">servicemodel</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;behaviors&gt;</span><span class="pln">
      </span><span class="tag">&lt;servicebehaviors&gt;</span><span class="pln">
        </span><span class="tag">&lt;behavior</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"default"</span><span class="tag">&gt;</span><span class="pln">
          </span><span class="tag">&lt;servicemetadata</span><span class="pln"> </span><span class="atn">httpgetenabled</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">httpsgetenabled</span><span class="pun">=</span><span class="atv">"true"</span><span class="tag">&gt;</span><span class="pln">          
          </span><span class="tag">&lt;servicedebug</span><span class="pln"> </span><span class="atn">includeexceptiondetailinfaults</span><span class="pun">=</span><span class="atv">"false"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/servicedebug&gt;&lt;/servicemetadata&gt;&lt;/behavior&gt;</span><span class="pln">
      </span><span class="tag">&lt;/servicebehaviors&gt;</span><span class="pln">
      </span><span class="tag">&lt;endpointbehaviors&gt;</span><span class="pln">
        </span><span class="tag">&lt;behavior</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"default"</span><span class="tag">&gt;</span><span class="pln">
          </span><span class="tag">&lt;webHttp/&gt;</span><span class="pln">
        </span><span class="tag">&lt;/behavior&gt;</span><span class="pln">
      </span><span class="tag">&lt;/endpointbehaviors&gt;</span><span class="pln">
    </span><span class="tag">&lt;/behaviors&gt;</span><span class="pln">
    </span><span class="tag">&lt;services&gt;</span><span class="pln">
      </span><span class="tag">&lt;service</span><span class="pln"> </span><span class="atn">behaviorconfiguration</span><span class="pun">=</span><span class="atv">"default"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"NorthwindWCF.Service2"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;host&gt;</span><span class="pln">
          </span><span class="tag">&lt;baseaddresses&gt;</span><span class="pln">
            </span><span class="tag">&lt;add</span><span class="pln"> </span><span class="atn">baseaddress</span><span class="pun">=</span><span class="atv">"http://localhost:4957"</span><span class="tag">&gt;</span><span class="pln">
          </span><span class="tag">&lt;/add&gt;&lt;/baseaddresses&gt;</span><span class="pln">
        </span><span class="tag">&lt;/host&gt;</span><span class="pln">
        </span><span class="tag">&lt;endpoint</span><span class="pln"> </span><span class="atn">behaviorconfiguration</span><span class="pun">=</span><span class="atv">"default"</span><span class="pln"> </span><span class="atn">binding</span><span class="pun">=</span><span class="atv">"webHttpBinding"</span><span class="pln"> </span><span class="atn">contract</span><span class="pun">=</span><span class="atv">"NorthwindWCF.IService2"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/endpoint&gt;</span><span class="pln">
      </span><span class="tag">&lt;/service&gt;</span><span class="pln">
    </span><span class="tag">&lt;/services&gt;</span><span class="pln">
    </span><span class="tag">&lt;protocolmapping&gt;</span><span class="pln">
      </span><span class="tag">&lt;add</span><span class="pln"> </span><span class="atn">binding</span><span class="pun">=</span><span class="atv">"basicHttpsBinding"</span><span class="pln"> </span><span class="atn">scheme</span><span class="pun">=</span><span class="atv">"https"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/add&gt;&lt;/protocolmapping&gt;</span><span class="pln">
    </span><span class="tag">&lt;servicehostingenvironment</span><span class="pln"> </span><span class="atn">aspnetcompatibilityenabled</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> </span><span class="atn">multiplesitebindingsenabled</span><span class="pun">=</span><span class="atv">"true"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/servicehostingenvironment&gt;&lt;/system&gt;</span>

No comments: