I've come across a handful of issues with web services integration that don't appear to be solvable. I'm curious to see whether anyone else is experiencing the same challenges.
You can't map your Web Service fields to a Service Desk guid. Service Desk doesn't send the guid to the web service; instead it sends an 11-part serialization of something that does not correspond to a guid in any way that I (or Support) can figure out. You can get around that by adding a BeforeSave calculation that returns a 64-byte string whose calculation is:
static def GetAttributeValue(Incident):
Value = Incident.Guid.ToString()
You can't map your web service to an incident number or guid if the web service is going to be called before the first status. My process had an automatic action under the Open status that would add a web service-enabled object. When I set logging to DEBUG I found that Service Desk was just sending null data instead of the GuidCopy field I'd created. I re-mapped the web service field to the incident's Process Ref and got the same result, which tells me that until the process reaches the first Status, it's not saved and the object's Guid and Incident have not been generated. For me this isn't much of an issue - I'm creating the incident via a perl script that leverages the REST API, and my script can just call the web service directly, or I could move the add-an-object action to be a manual action under the Presubmission status and have the perl script call it. Still, it's unfortunate that I have to take that extra step.
I have been unable to get Service Desk to recognize any web service except asmx, which as far as I can tell is widely considered obsolete. Microsoft itself recommends WCF but I was completely unable to get Service Desk (7.8.2) to recognize a WCF page as a web service.
Also, I've been doing some testing with web services and calculations, and it looks like LDSD calls the web service before it performs any calculations, so if you try sending calculated values to a web service, the web service will just get nulls. I've tested this in both 2016.1 and 7.8.2.