I know this is an old thread, but I found a solution that doesn't require hacky workarounds and works in all browsers, and I thought I'd share for those interested. Just a note that as far as I can tell, this method only works with dynamic map service layers where the service has 'Supports dynamic layers' set to true. Using Chrome's dev console, I looked at the response from an esriRequest on a layer that had the halo effect applied to its labels when published from ArcGIS Desktop. Those labels rendered correctly in my app, so I figured there had to be a way to accomplish it programatically as well. Here was the relevant part of the returned response: Notice the symbol 'type' is 'esriTS', not 'textsymbol', and there are properties for 'haloColor' and 'haloSize.' I ran with that in my code and rather than use the standard TextSymbol for my label's symbol, I created my own symbol instead and made the 'type' be 'esriTS', and added the properties for 'haloColor' and 'haloSize.' var labelClass = new LabelClass({ labelExpression: '[CULVERTID]', labelPlacement: 'above-along', symbol: { 'type': 'esriTS', 'color': [0,0,0,255], 'haloColor': [255,255,255,255], 'haloSize': 2, 'font': { 'family': 'Arial', 'size': 12, 'weight': 'bold' } } }); ... font = new esri.symbol.Font("10pt", esri.symbol.Font.STYLE_NORMAL, esri.symbol.Font.VARIANT_NORMAL,esri.symbol.Font.WEIGHT_NORMAL,"Verdana"); ... var textSymbol = new esri.symbol.TextSymbol(feature.attributes["LABEL"]).setColor(new dojo.Color([255, 0, 0])). setOffset(30, 0).setFont(font).setKerning(true); var point = new esri.geometry.Point(feature.attributes["NNLL_LONG_DEC"], feature.attributes["NNLL_LAT_DEC"], map.spatialReference); map.graphics.add(new esri.Graphic(point, textSymbol)); ... This worked for me. Before and after label change shown below. Before: (default labelling from the map service) After (programatically changed labels): Here's a fiddle as well (this is a modified fork of an existing fiddle: Edit fiddle - JSFiddle )
... View more