<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: SOE REST Web Service - How to return different MIME content types? in ArcGIS REST APIs and Services Questions</title>
    <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433097#M2070</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Actually for .NET, the string response properties is an &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;out&lt;/SPAN&gt;&lt;SPAN&gt; parameter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So you should just do a :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
 responseProperties = @"{"Content-Type": "..your mime type..", &amp;lt;...other HTTP headers...&amp;gt;}";
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 19:26:46 GMT</pubDate>
    <dc:creator>RahulRavikumar</dc:creator>
    <dc:date>2021-12-11T19:26:46Z</dc:date>
    <item>
      <title>SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433094#M2067</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Folks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I posted this in the ArcObjects forum, but thought I'd see if anyone here might have an idea, too. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've been messing around with the new types in ESRI.ArcGIS.SOESupport, starting at 10.0 Prerelease.&amp;nbsp; I've successfully built two little server object extensions that each expose a REST resource and REST operation.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My first SOE, which encapsulates some spatial and attribute query business logic and returns results as JSON, works fine when upgraded to 10.0 Release.&amp;nbsp; However, my other SOE, which does &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;not&lt;/SPAN&gt;&lt;SPAN&gt; return JSON, but instead a PNG image, doesn't work as expected.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The latter's REST operation functionality is generally (for the purposes of this question) encapsulated in a method whose signature conforms to the ESRI.ArcGIS.SOESupport.OperationHandler delegate.&amp;nbsp; As such, I'm able to simply return my PNG image as an array of bytes.&amp;nbsp; Back at 10.0 Prerelease, this worked splendidly.&amp;nbsp; I was able to do some heavy processing on the server, dynamically create a PNG, and return it back to the client.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After upgrading to 10.0 Release, and making the requisite changes to my REST operation's method signature (by adding an additional parameter, &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;requestProperties&lt;/SPAN&gt;&lt;SPAN&gt;), my SOE no longer returns a PNG image that clients can use; instead, it returns the PNG's byte array representation as text.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've spent some time today looking into the cause of this, and it seems like this is the case:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1) At 10.0 Prerelease, my SOE's HTTP response contained &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;no&lt;/SPAN&gt;&lt;SPAN&gt; content type.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2) At 10.0 Release, the response contains this content type: "text/plain;charset=utf-8"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This seems to explain why I'm not seeing an honest-to-God image, but just a text representation of the bytes that make up the image.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Upon discovering this, I hit the documentation, trying to see if there was a way I could coax the SOE into specifying a different content type within the response.&amp;nbsp; The documentation on resources.arcgis.com didn't appear to say much (in fact, the ESRI.ArcGIS.SOESupport namespace doesn't even appear to exist in the API reference).&amp;nbsp; For the heck of it, I started poking around in VS 2010's Object Browser.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;To my surprise, I noticed a new class - RestResponseProperties.&amp;nbsp; Looking at its documentation in the object browser, this seemed to be something useful, and might just give me what I need.&amp;nbsp; However, I'm not actually able to get it to work.&amp;nbsp; When I try something like this...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;

private byte[] MyRESTOperation(NameValueCollection boundVariables,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JsonObject operationInput,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string outputFormat,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string requestProperties,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out string responseProperties)
{

// Create the PNG image, and get it as an array of bytes.
byte[] pngAsBytes = myImageGeneratorClass.Generate();

// Then attempt to specify the HTTP response's 
// content type.&amp;nbsp; Let it be a PNG image (and not something else, like 
// plain text).
RestResponseProperties props = new RestResponseProperties();
props.ContentType = "image/png";
responseProperties = props.ToString();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 

// Return the bytes.
return pngAsBytes; 

}&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;...I get the following response (in Firefox, fwiw)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;{"error":{"code":500,"message":"An unexpected error occurred processing the request.","details":[]}}&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;which, unfortunately, doesn't give me a lot of love.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone know what the issue might be?&amp;nbsp; Are there only certain content types that I can use for RestResponseProperties.ContentType?&amp;nbsp; Or, are there certain values for these four parameters of an OperationHandler&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="font-style:italic;"&gt;operationInput: A JsonObject instance with the input for the operation.&lt;BR /&gt;outputFormat: The requested output format, for example "json".&lt;BR /&gt;requestProperties: Well-known properties of the request.&lt;BR /&gt;responseProperties: Well-known properties for the response.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;that I need to set, or check for?&amp;nbsp; Perhaps an output format other than "json"?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Brooks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 Jul 2010 21:04:48 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433094#M2067</guid>
      <dc:creator>BrooksShannon</dc:creator>
      <dc:date>2010-07-09T21:04:48Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433095#M2068</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;responseProperties takes a 'jsonified' string for custom headers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
responseProperties[0] = @"{"Content-Type" : "image/png"}"
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this helps.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:26:44 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433095#M2068</guid>
      <dc:creator>RahulRavikumar</dc:creator>
      <dc:date>2021-12-11T19:26:44Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433096#M2069</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for the quick reply! I'll give that a try over the weekend and see if it does the trick.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Have a good weekend,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Brooks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 10 Jul 2010 00:30:55 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433096#M2069</guid>
      <dc:creator>BrooksShannon</dc:creator>
      <dc:date>2010-07-10T00:30:55Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433097#M2070</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Actually for .NET, the string response properties is an &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;out&lt;/SPAN&gt;&lt;SPAN&gt; parameter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So you should just do a :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
 responseProperties = @"{"Content-Type": "..your mime type..", &amp;lt;...other HTTP headers...&amp;gt;}";
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:26:46 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433097#M2070</guid>
      <dc:creator>RahulRavikumar</dc:creator>
      <dc:date>2021-12-11T19:26:46Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433098#M2071</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks, Rahul.&amp;nbsp; You're right about the string being an out parameter, I saw that myself, and formatted it as you suggested.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I seem to be making a little bit of progress.&amp;nbsp; Using the style of responseProperties that you suggested (a jsonified string), I'm able to set them to &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;responseProperties = "{\"Content-Type\" : \"image/png\"}";&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;which results in the following, in my response header&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Content-Type: image/png; charset=utf-8&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Unfortunately, both IE and Firefox claim the PNG that my SOE generates and returns isn't displayable / contains errors.&amp;nbsp; Looking at the raw data in WFetch, I do see some differences (in the encoding?) between what my SOE now returns, and what it used to return, when it worked, at 10.0 Prerelease.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When it worked, the PNG data in the response looked like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;�?�PNG\r\n
\x01A\n
\x000\x000\x000\rIHDR\x000\x000\x002�?�\x000\x000\x001&amp;#144;\x008\x006\x000\x000\x000&amp;gt;ó�?%\x000\x000\x000\x001sRGB\x000®�?\x01Cé\x000\x000\x000\x004gAMA\x000\x000±&amp;#143;\x00Büa\x005\x000\x000\x000\tpHYs\x000\x000\x00E�?\x000\x000\x00E�?\x001�?o¨d\x000\x000ÿ¥IDATx^ìý�?ÏmÍ¶æ\x007íý&amp;#157;s�?�sï9ç\x016\t\x006C�??JS\n
\x019�?TB \x004\x002\x004�?)�?�?�?�?�?\x015\x017�?]·Ý&amp;gt;&amp;#127;�?;îd�?r�?&amp;#141;ìXnZîXr�?�??;\x016B)ã\x004D�?�&amp;#144;�?�·ð-ò\x014{3ŸñŽ'ö3Ÿ5FD�?µ�?wïý}gméÝk�?�?�?1cFù�?�Ï�?�?ùþã�?&amp;#143;ÿ�?wŸþ½Ï�?î\x017�?³0�?��?2®ŸþôÝû_üâÝ;üâ\x006~ü³Ÿ}r�?�?�?\x011�?�ÿèÏsõ�??g�?�ëª0êþá�?
»w�?|£W½{\x0077M�?qþ\x01EnL+~�?í|õùìû�?&amp;#127;÷ñ{�?ûä�?�s�?�?íW~åÝG�?\x01Fç8�?Ÿú�?ýW&amp;#127;õ�?ÿ\x007?x¹\x01E¿�?�\x01BŽù\x007g=&amp;#143;p�?��?��?��?�&amp;#157;ã©é�?\x01D�?Ÿ~\x01EFÏ5�?�?9»^ãÐç©ŽÝ&amp;#141;çú;;v?\x016\x01Có2�?�?¿&amp;#127;&amp;#127;:Ÿ�?�&amp;#127;åw´ÁQ/\x00Bÿ�?��?ìV÷^w5ù\x00CÏû*ò�?�?�?�ðŸ;*Ý
3&amp;gt;šŽG¯¿7ï?çu«òí�?rïu]\x01B,�?��?"#^µÝ~�?L&amp;#127;�?ë�?�\x003o�??\x003ï&amp;#143;Áç\x01F�?�?\x015�?¼#�?�&amp;#129;]�?&amp;#129;�?�?�û1ý�?¯�?\x01E&amp;#129;\x00F¿\n
ZÝ1"ª*°�? �?\x01A\x000MÁ&amp;#144;�??ÿùzðñ°8÷øx&amp;#143;\x003�?F'�?0zŽô9\þú¯&amp;#127;\n&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The PNG data I get back at 10.0 Release, in my not-quite-functional SOE, looks like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;ï¿½PNG\r\n
\x01A\n
\x000\x000\x000\rIHDR\x000\x000\x002ï¿½\x000\x000\x001ï¿½\x008\x006\x000\x000\x000&amp;gt;ï¿½ï¿½%\x000\x000\x000\tpHYs\x000\x000\x00Eï¿½\x000\x000\x00Eï¿½\x001ï¿½oï¿½d\x000\x000ï¿½ï¿½IDATx^ï¿½ï¿½\x00Bï¿½uï¿½Zï¿½\x007ï¿½Í©Z\x00FKDDJï¿½Vï¿½Gjï¿½V=Rï¿½ï¿½ï¿½\x014\x00Fï¿½ï¿½ï¿½ï¿½9ï¿½ï¿½
ï¿½" *nN\x00Bï¿½ï¿½ï¿½ï¿½ï¿½@jï¿½ï¿½AC\x008ï¿½\x015kCHï¿½jï¿½\x00Eï¿½ï¿½ï¿½ï¿½ï¿½\rï¿½ï¿½\x010ï¿½�?�?5Dï¿½!ï¿½\x0105;ï¿½ï¿½Uï¿½|ï¿½oï¿½ï¿½7ï¿½&amp;#127;^ï¿½uï¿½1ï¿½|ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½�?&amp;#157;9ï
¿½ï¿½ï¿½ï¿½cï¿½ï¿½7ï¿½ï¿½ï¿½&amp;#127;ï¿½oï¿½ï¿½ï¿½ï¿½u/ï¿½ï¿½ï¿½Mï¿½ï¿½ï¿½%ï¿½ï¿½uï¿½ï¿½ï¿½vï¿½ï¿½ï¿½ï¿½&amp;#127;^x�?¿ï¿½ï¿½/ï¿½ï¿½%/Pï¿½ï¿½ï¿½&amp;#127;ï¿½ï¿½ï¿½ï¿½?&amp;#127;s\x01Fï¿½ï¿½ï¿
½ï¿½ï¿½ï¿½\x017ï¿½my\wï¿½ï¿½ï¿½ï¿½ï¿½&amp;#127;_xï¿½C&amp;gt;$\x01Fï¿½ï¿½\x00B�?�??ï¿½aï¿½ï¿½&amp;amp;nï¿½rï¿½ï¿½ï¿½?ï¿½ï¿½ï¿½\x00Fï¿½ï¿½\x017n&amp;gt;ï¿½C_ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½&amp;gt;ï¿½ï¿½_ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½?o&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Could there be something else that I need to specify in the responseProperties or outputFormat that indicates what encoding should be used (if, in fact, this is an encoding issue)?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Brooks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:26:49 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433098#M2071</guid>
      <dc:creator>BrooksShannon</dc:creator>
      <dc:date>2021-12-11T19:26:49Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433099#M2072</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Looks like there is something wrong with the encoding of the image. The PNG header that you have shown, is invalid.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My guess is that the image bytes are getting &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;re-encoded &lt;/SPAN&gt;&lt;SPAN&gt;to UTF-8. So my question is, how are you generating the image? Can you show the code snippet that you are using?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 13 Jul 2010 00:31:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433099#M2072</guid>
      <dc:creator>RahulRavikumar</dc:creator>
      <dc:date>2010-07-13T00:31:45Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433100#M2073</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;My guess is that the image bytes are getting &lt;SPAN style="font-style:italic;"&gt;re-encoded &lt;/SPAN&gt;to UTF-8. So my question is, how are you generating the image? Can you show the code snippet that you are using?&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Rahul,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's the section of my code that constructs a PNG image and returns it as an array of bytes.&amp;nbsp; (This assumes that you have an array of integers that represent the image's pixels, called "pixels," before starting.)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create a BitmapSource instance, using the "pixels" array as the
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // source of the image.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BitmapSource bitmapSource = BitmapSource.Create(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; height,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 96,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 96,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PixelFormats.Pbgra32,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pixels,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (width * PixelFormats.Pbgra32.BitsPerPixel + 7) / 8);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create a PngBitmapEncoder, which we'll use to actually create the
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // PNG image.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PngBitmapEncoder encoder = new PngBitmapEncoder();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add a single bitmap frame to the encoder. The BitmapFrame represents
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the image.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; encoder.Frames.Add(BitmapFrame.Create(bitmapSource));

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Then, create a MemoryStream. Since we're going to return the PNG
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // as an array of bytes, we need to convert the image contents to 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // a byte array - and the MemoryStream serves as an intermediary 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // vehicle to perform this task.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MemoryStream memStream = new MemoryStream();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Tell the PngBitmapEncoder to save its contents to the memory
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // stream. (NOTE: You could use other streams, such as FileStream,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to save the contents to a different "media" if you wish.)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; encoder.Save(memStream);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get an array of bytes from the MemoryStream, and return them.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] bytes = memStream.ToArray();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return bytes;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Bear in mind that this all worked at ArcGIS Server 10.0 Prerelease, and that my code hasn't changed.&amp;nbsp; It's as though ArcGIS Server 10.0 Release is, itself, (re)encoding the bytes in UTF-8 &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;after&lt;/SPAN&gt;&lt;SPAN&gt; I return them from my SOE REST operation handler.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again for all your help, Rahul. I appreciate it!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-Brooks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:26:51 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433100#M2073</guid>
      <dc:creator>BrooksShannon</dc:creator>
      <dc:date>2021-12-11T19:26:51Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433101#M2074</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Rahul / Anyone else who might be following this -&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Given my last post, might anyone else have any ideas?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Brooks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Jul 2010 20:47:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433101#M2074</guid>
      <dc:creator>BrooksShannon</dc:creator>
      <dc:date>2010-07-21T20:47:29Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433102#M2075</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The source for the image generation part looks correct to me. Can you set the content-type to something like "application/octet-stream", download the response from the SOE, save it as a PNG and open it in a Paint or something similar ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Another way that i think that you could solve this problem is, you can write a file to your arcgisoutput directory (virtual output directory) and return a URL to the image as JSON (text/plain).&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Jul 2010 09:54:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433102#M2075</guid>
      <dc:creator>RahulRavikumar</dc:creator>
      <dc:date>2010-07-22T09:54:10Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433103#M2076</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried to reproduce this situation from scratch. I downloaded 'SimpleRESTSOE' example from ESRI (&lt;/SPAN&gt;&lt;A href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Sample_Simple_REST_SOE/000100000m89000000/" rel="nofollow noopener noreferrer" target="_blank"&gt;here&lt;/A&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and added simple 'png' method that reads a PNG file from disk and returns it as byte array.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I added the following snippet to CreateRestSchema()&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;RestOperation png = new RestOperation("png",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new string[] { "png" },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PngHandler);
soeResource.operations.Add(png);&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and the handler itself:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
 private byte[] PngHandler(System.Collections.Specialized.NameValueCollection boundVariables,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ESRI.ArcGIS.SOESupport.JsonObject operationInput,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string outputFormat,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string requestProperties,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out string responseProperties)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; responseProperties = "{\"Content-Type\" : \"image/png\"}";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.FileStream fs = new System.IO.FileStream("c:\\temp\\8540.png", System.IO.FileMode.Open);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.BinaryReader br = new System.IO.BinaryReader(fs);


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.MemoryStream ms = new System.IO.MemoryStream();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const int count = 1024;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buf = br.ReadBytes(count);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms.Write(buf, 0, buf.Length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (buf.Length &amp;lt; count)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; br.Close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Dispose();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ms.ToArray();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;requested: h ttp://localhost/ArcGIS/rest/services/Test/MapServer/exts/SimpleRESTSOE/png?f=png&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And I got back valid PNG displayed in browser. HTTP response headers are here:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
HTTP/1.1 200 OK
Content-Type: image/png
ETag: -969848622
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Thu, 22 Jul 2010 18:16:45 GMT
Content-Length: 2561
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;NOTE: There's no extra &lt;/SPAN&gt;&lt;STRONG&gt;charset=utf-8&lt;/STRONG&gt;&lt;SPAN&gt; . I believe this extra encoding bit makes all the difference. Please verify that you do not add this encoding somewhere else in your code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope this helps.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Sergey Malgin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:26:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433103#M2076</guid>
      <dc:creator>SergeyMalgin</dc:creator>
      <dc:date>2021-12-11T19:26:54Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433104#M2077</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;BR /&gt;&lt;BR /&gt;NOTE: There's no extra &lt;STRONG&gt;charset=utf-8&lt;/STRONG&gt; . I believe this extra encoding bit makes all the difference. Please verify that you do not add this encoding somewhere else in your code.&lt;BR /&gt;&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think you're correct; and, as it stands, I don't add the encoding specification anywhere in my code.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;However, with your help, I was able to get my SOE to work again! I noticed in your sample that you were doing things in basically the same way I was, except for one critical difference. Your REST operation is constructed like this&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
RestOperation png = new RestOperation("png",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new string[] { &lt;STRONG&gt;"png"&lt;/STRONG&gt; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PngHandler);&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;While mine looked something like this&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
RestOperation png = new RestOperation("png",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new string[] { &lt;STRONG&gt;"json"&lt;/STRONG&gt; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PngHandler);&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As such, my request would contain a format parameter &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;f=json&lt;/SPAN&gt;&lt;SPAN&gt;, whereas your format parameter was &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;f=png&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;All I had to do was swap "json" for "png" and specify "png" as the return format in the request.&amp;nbsp; That did the trick!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The funny thing is, back at 10.0 prerelease, it worked just fine to use "json" as the return format.&amp;nbsp; Now, however, somewhere along the line, the data must get automatically encoded in UTF8 if the return format is "json" but not if it's something else.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for helping me solve this, Sergey!&amp;nbsp; Without your help this would have probably gone unresolved.&amp;nbsp; I really appreciate you taking the time to investigate it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Brooks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:26:57 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433104#M2077</guid>
      <dc:creator>BrooksShannon</dc:creator>
      <dc:date>2021-12-11T19:26:57Z</dc:date>
    </item>
    <item>
      <title>Re: SOE REST Web Service - How to return different MIME content types?</title>
      <link>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433105#M2078</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;... and the handler itself:&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
 private byte[] PngHandler(System.Collections.Specialized.NameValueCollection boundVariables,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ESRI.ArcGIS.SOESupport.JsonObject operationInput,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string outputFormat,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string requestProperties,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out string responseProperties)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; responseProperties = "{\"Content-Type\" : \"image/png\"}";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.FileStream fs = new System.IO.FileStream("c:\\temp\\8540.png", System.IO.FileMode.Open);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.BinaryReader br = new System.IO.BinaryReader(fs);


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.MemoryStream ms = new System.IO.MemoryStream();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const int count = 1024;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buf = br.ReadBytes(count);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms.Write(buf, 0, buf.Length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (buf.Length &amp;lt; count)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; br.Close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Dispose();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ms.ToArray();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/PRE&gt;&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That was a real good template, but can be simplified and generalized in several ways:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;&lt;BR /&gt;&lt;LI&gt;For reading a file in .net you can simply use File.ReadAllBytes(path);&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Determining the correct mime type is discussed &lt;A href="http://stackoverflow.com/questions/58510/using-net-how-can-you-find-the-mime-type-of-a-file-based-on-the-file-signature" rel="nofollow noopener noreferrer" target="_blank"&gt;here&lt;/A&gt;&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;Setting the responseProperties is much easier when using the JsonObject&lt;/LI&gt;&lt;/UL&gt;&lt;BR /&gt;&lt;SPAN&gt;This results in two little functions, which do the job:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

protected string GetMimeType(FileInfo fileInfo)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; string mimeType = "application/unknown";
&amp;nbsp;&amp;nbsp;&amp;nbsp; RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(fileInfo.Extension.ToLower());
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (regKey != null)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object contentType = regKey.GetValue("Content Type");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contentType != null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mimeType = contentType.ToString();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return mimeType;
}
 
protected byte[] FileHandler(string path, out string responseProperties)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; FileInfo f = new FileInfo(path);
&amp;nbsp;&amp;nbsp;&amp;nbsp; string contentType = GetMimeType(f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; long contentLength = f.Length;
&amp;nbsp;&amp;nbsp;&amp;nbsp; JsonObject props = new JsonObject();
&amp;nbsp;&amp;nbsp;&amp;nbsp; props.AddString("Content-Type", contentType);
&amp;nbsp;&amp;nbsp;&amp;nbsp; props.AddLong("Content-Length", contentLength);
&amp;nbsp;&amp;nbsp;&amp;nbsp; props.AddString("Pragma", "public");
&amp;nbsp;&amp;nbsp;&amp;nbsp; props.AddString("Cache-control", "must-revalidate");
&amp;nbsp;&amp;nbsp;&amp;nbsp; props.AddString("Content-Disposition", "inline; filename=\"" + path + "\"");
&amp;nbsp;&amp;nbsp;&amp;nbsp; responseProperties = props.ToJson();
&amp;nbsp;&amp;nbsp;&amp;nbsp; return File.ReadAllBytes(path);
}
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:27:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-rest-apis-and-services-questions/soe-rest-web-service-how-to-return-different-mime/m-p/433105#M2078</guid>
      <dc:creator>MCMADMIN</dc:creator>
      <dc:date>2021-12-11T19:27:00Z</dc:date>
    </item>
  </channel>
</rss>

