The ArcGIS Server SOAP API is implemented at the server object level. This means that SOAP messages are processed directly by a server object or extension (SOE). The ArcGIS Server SOAP Web service handler directs SOAP messages to a server object for you. The ArcGIS Server REST API is not implemented at the server object level. The ArcGIS Server REST Web service handler processes restful requests and (in general) uses the ArcGIS Server SOAP API to communicate with ArcGIS Server. How does this relate to exposing a custom SOE as a Web service? The SOAP Web service handler contains logic to discover custom SOEs with a SOAP interface (see sample and discussion below). The REST Web service handler does not contain the logic to discover custom SOEs at this time. Consequently, to expose a custom SOE as a REST service you’ll need to create your own Web service to handle restful requests and work with the SOE. Unfortunately this means you'll need to work with ArcObjects remotely in the Web service logic, which will require an ArcGIS Server license in the app-tier... a less than optimal solution. The folks at ESRI who work on the REST handler may resolve this in the future.
I've included a sample that illustrates how to expose a custom SOE via the ArcGIS Server SOAP Web service handler. It builds on the current Server SDK sample which shows how to create a simple SOE.
I’ve modified this sample to illustrate how to support exposing a custom SOE using an ArcGIS Server Web service endpoint. The sample is merely instructive, so it just provides the basics of custom SOE development. To expose a WSDL for the custom SOE and make it available via an ArcGIS Server Web service endpoint, create a WSDL and put it in the
Download the sample here.
Everything is pretty raw and simple at the moment, but it works. I’m sure there’s a better way to create the WSDL and generate SOAP responses, but that’ll take some additional research. Once the custom SOE is deployed and enabled on a map service, you can use the following url to get the WSDL: http://localhost/arcgis/services/<service name>/MapServer/SimpleSOE_CSharp?wsdl
21 comments:
Hi, is there another way than parse XML request to process complex SOAP data types (e.g. MapDescription) sent to HandleStringRequest method of SOE?
When do you expect the possibility of accessing SOE thru REST as you mentioned in your post?
Thanks,
Matej
Matej, Have you used linq to xml so it's very easy...
Nice work ... This actually gave me some hopes over SOE to SOAP and ways to handle the internet resources.
When i typed the URL in the browser to see the SOAP, i get the following error.
http://localhost/arcgis/services/my servicename/MapServer/SimpleSOE_CSharp?wsdl
Server Error in '/ArcGIS/services' Application.
Error HRESULT E_FAIL has been returned from a call to a COM component.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Error HRESULT E_FAIL has been returned from a call to a COM component.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[HttpException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.]
Matej,
As far as parsing XML is concerned, LINQ (as NicoGis mentioned) and the standard .NET XmlTextReader will work. From ESRI's perspective, a new Message class was provided with 9.3 to assist with parsing. It's not documented very well, so I've included a sample code snippet below. I construct a SOAP message for the sake of the example.
On the SOE-REST front, ESRI may provide a means for accessing a custom SOE via the ArcGIS Server REST services in 9.4. In the meantime, you can create your own REST service implementation (e.g. asmx, wcf, httphandler, etc.) that wraps working with your SOE. Granted it will be not be discoverable using ArcGIS Services Directory and not accessible via the well-known ArcGIS Server REST endpoint... but it is technically possible, and legal. You would need to license the machine(s) to use ArcObjects remotely. The Web ADF runtime gives you what you need in the smallest install package available.
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version='1.0' encoding='utf-8'?>");
sb.Append("<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>");
sb.Append("<soap:Body>");
sb.Append("<MySOEAction>");
sb.Append("<SomeName>Search Extent</SomeName>");
sb.Append("<FilterGeometry xmlns:q1='http://www.esri.com/schemas/ArcGIS/9.3' xsi:type='q1:EnvelopeN' xmlns=''><XMin>0</XMin><YMin>0</YMin><XMax>180</XMax><YMax>90</YMax></FilterGeometry>");
sb.Append("</MySOEAction>");
sb.Append("</soap:Body>");
sb.Append("</soap:Envelope>");
ESRI.ArcGIS.esriSystem.IXMLStream requestXmlStream =
new ESRI.ArcGIS.esriSystem.XMLStreamClass();
requestXmlStream.LoadFromString(sb.ToString());
ESRI.ArcGIS.esriSystem.IMessage requestMessage =
new ESRI.ArcGIS.esriSystem.MessageClass();
requestMessage.ReadXML(requestXmlStream as ESRI.ArcGIS.esriSystem.IStream);
switch (requestMessage.Name)
{
case "MySOEAction":
ESRI.ArcGIS.esriSystem.IXMLSerializeData requestParameters = requestMessage.Parameters;
int someNameIndex = requestParameters.Find("SomeName");
string someName = requestParameters.GetString(someNameIndex);
int geometryIndex = requestParameters.Find("FilterGeometry");
ESRI.ArcGIS.Geometry.IEnvelope soapGeometry =
(ESRI.ArcGIS.Geometry.IEnvelope)requestParameters.GetObject(
geometryIndex, "http://www.esri.com/schemas/ArcGIS/9.3", "Envelope");
break;
}
ShailGIS,
In general the error you specify occurs when the SOE is found, but the wsdl is not. Where did you place the SimpleSOE_CSharp.wsdl? Do you have a distributed install (SOM on one machine, multiple SOCs different machines)?
Rex,
I have got through this situation, where i saw those errors. That was because they were not placed under the right directory C:\Program Files\ArcGIS\XmlSchema.
I was able to get your solution working.
But i was also wondering, if anyone has implemented the ESRI Layout SOE (Print Map SOE) sample working through IRequestHandler.
Thanks,
Shail ...
Hi Sir,
Sorry for putting it here. but i have no other way to contact u..
I am a beginner level GIS Application Programmar. I had gone through http://proceedings.esri.com/library/userconf/devsummit07/papers/developing_custom_web_tasks_using_the_net_web_adf-deep_dive.pdf
writeen by you.
very good and useful.
And now i'm trying to do the Manager Integration part with the custom tasks based on that.And I am struck with web configurator part.Not able to dynamically populate values in the task configuration in manager.
Looking for your help
Thanks in advance!
Anoop.
Hi,
Is there a way to generate the wsdl from the SOE code automatically?
Thanks
Michal
I know this has been some time ago already, but seems like I'm bit struggling with this one.
I was able to register the extension and also the 'call SOE via SOAP' button works (so it gets the time via soe through soap), but the returnCircle method is throwing me an error, and I've noticed that after this line of code the soext object says :
m_SOH System.Runtime.Remoting.RemotingException: Remoting cannot find field 'm_SOH' on type 'SimpleSOE_CSharp.UtilSOE_CSharp'.
debugging seems to be a bit of a pain with SOE, will try out suggestions from other guys on their blogs (mapbutcher e.g.)...
any ideas what I might be doing wrong?
cheers
ArcGIS Server makes it easy for organizations to share mapping services and applications across the Web.
With ArcGIS Server, you can
* Connect more people with the information they need to make better decisions.
* Publish fast, intuitive Web mapping applications and services tailored to your audience.
* Simplify access to your services, data, and imagery.
Recently I just came across a good article on " Windows Server"
Here is its link.
hi All
i m getting same problem when i put wms request in browser
plz any one can help whats the error is?
[HttpException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.]
and one thing more what is a complete url for connecting a wms layer to browser i used the following is it correct
http://myservername/ArcGIS/services/mymaps/abcprovince/MapServer/WMSServer
how i can delete our comments and profile from here
Thanks for the informative article. This is one of the best resources I have found in quite some time. Nicely written and great info. I really cannot thank you enough for sharing.
python Training in Pune
python Training in Chennai
python Training in Bangalore
Excellent post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
Best Devops Training in pune
Devops Training in Bangalore
Power bi training in Chennai
Pleasant Tips..Thanks for Sharing….We keep up hands on approach at work and in the workplace, keeping our business pragmatic, which recommends we can help you with your tree clearing and pruning in an invaluable and fit way.
Data Science Training in Chennai
Data Science training in kalyan nagar
Data science training in Bangalore
Data Science training in marathahalli
Data Science interview questions and answers
Data science training in bangalore
This is really a very good article.Thanks for taking the time to discuss with us , I feel happy about learning this topic. Keep sharing your information regularly for my future reference.
DevOps Training | Certification in Chennai | DevOps Training | Certification in anna nagar | DevOps Training | Certification in omr | DevOps Training | Certification in porur | DevOps Training | Certification in tambaram | DevOps Training | Certification in velachery
I like so much your topic content. I read understand with information. thanks.
Python Training in Chennai
Python Training in Bangalore
Python Training in Hyderabad
Python Training in Coimbatore
Python Training
python online training
python flask training
python flask online training
Thanks for sharing great information. I like your blog and highly recommend.
oracle training in chennai
oracle training in tambaram
oracle dba training in chennai
oracle dba training in tambaram
ccna training in chennai
ccna training in tambaram
seo training in chennai
seo training in tambaram
First i got a great blog .I will be interested in more similar topics. i see you got really very useful topics, i will be always checking your blog thanks
angular js training in chennai
angular js training in porur
full stack training in chennai
full stack training in porur
php training in chennai
php training in porur
photoshop training in chennai
photoshop training in porur
Excellent post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
sap training in chennai
sap training in annanagar
azure training in chennai
azure training in annanagar
cyber security course in chennai
cyber security course in annanagar
ethical hacking course in chennai
ethical hacking course in annanagar
Post a Comment