Hey Guido! I really appreciate your response below is the code i am using:
Please note i have tried using HttpWebrequest and also HttpClient
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using System.Net.Http;
using System.Net;
using Microsoft.Xrm.Sdk.Query;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Crm.Sdk.Messages;
using System.Xml;
using System.Net.Http.Headers;
using System.IO;
using System.Xml.Linq;
namespace IBC.Plugins.InfocusIntegration
{
public class AHAIntakeToInfocus : IPlugin
{
//public static readonly HttpClient httpClient = new HttpClient();
public void Execute(IServiceProvider serviceProvider)
{
//// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Get a reference to the Organization service.
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
// System service can access config and other entities even if calling user do not have sufficient privileges
IOrganizationService systemService = factory.CreateOrganizationService(null);
// Initialize plugin trace service
ITracingService trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
//throw new InvalidPluginExecutionException("PreExecute");
try
{
if (context.InputParameters != null && context.Depth <= 2)
{
Entity ahaintakeEntity = (Entity)context.InputParameters["Target"];
Entity postIntakeSelection = (Entity)context.PostEntityImages["Image"];
var ahaintakestatus = ahaintakeEntity.GetAttributeValue<OptionSetValue>("statuscode").Value;
//HttpClient client = new HttpClient();
if (ahaintakestatus == 863180000)
{
string ahaintakeid = ahaintakeEntity.GetAttributeValue<Guid>("intakeid").ToString().ToUpper();
string ahaintakename = postIntakeSelection.GetAttributeValue<string>("name");
string brokername = postIntakeSelection.GetAttributeValue<EntityReference>("ibc_brokercontact").Name;
trace.Trace("Line 44: " + intakename);
trace.Trace("Line 45: " + intakeid);
trace.Trace("Line 46: " + brokername);
var url = "oswdev11/.../WorkflowService.asmx";
trace.Trace("Line 51:" +url);
//var _action = "tempuri.org/CallWorkflow";
//trace.Trace("Line 53:" + _action);
//XmlDocument soapEnvelopeDocument = new XmlDocument();
string xmlSOAP = "<soapenv:Envelope xmlns:soapenv='www.w3.org/.../><soapenv:Body><ns1:CallWorkflow xmlns:ns1='tempuri.org/'><ns1:stringXml>" +
"<![CDATA[" +
"<ibc_intake1 xmlns:stepwise='http://schemas.stepwise.optum.com/Portal/2.0' stepwise:UserId='********' stepwise:Password='********' stepwise:RequestInputProcessor='Int_SF_AHA_NB_RequestInputProcessor' stepwise:EnableProfiler='false' stepwise:EnableTrace='false'>" +
"<Broker>"+brokername+@"</Broker>" +
"<BrokerId>"+intakeid+@"</BrokerId>" +
"<ibc_name>"+intakename+@"</ibc_name>" +
"</ibc_intake1>" +
"]]>" +
"</ns1:stringXml></ns1:CallWorkflow></soapenv:Body></soapenv:Envelope>";
HttpResponseMessage result = PostSOAPRequestAsync(url, xmlSOAP,systemService, trace);
trace.Trace("Line 65:" + result);
//soapEnvelopeDocument.LoadXml(xmlSOAP);
//trace.Trace("Line 65:" + xmlSOAP);
//System.Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
//HttpWebRequest webRequest = (HttpWebRequest)CreateWebRequest(url, _action);
//webRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
//webRequest.Timeout = System.Threading.Timeout.Infinite;
//webRequest.KeepAlive = false;
//trace.Trace("Line 67: " + webRequest);
//InsertSoapEnvelopeIntoWebRequest(soapEnvelopeDocument, webRequest);
//IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);
//asyncResult.AsyncWaitHandle.WaitOne();
//string soapResult = string.Empty;
//using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
//{
// using (var stream = webResponse.GetResponseStream())
// {
// using (var sr = new StreamReader(stream))
// {
// soapResult = sr.ReadToEnd();
// //trace.Trace("Line 62:" + content);
// //throw new InvalidPluginExecutionException(content);
// }
// }
//}
}
// get the response from the completed web request.
}
}
catch (Exception ex)
{
throw new InvalidPluginExecutionException(ex.Message, ex);
}
}
internal static HttpResponseMessage PostSOAPRequestAsync(string url, string text, IOrganizationService systemService, ITracingService trace)
{
try
{
using (var httpClient = new HttpClient())
{
var request = new StringContent(text, Encoding.UTF8, "text/xml");
trace.Trace("Line 121 " + request.ReadAsStringAsync().Result);
//request.Headers.Add("SOAPAction", _action);
//var authenticationString = $"{ClientID}:{Secret}";
//var byteArray = Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
//httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", byteArray);
//request.Content = content;
//request.Method = HttpMethod.Post;
//request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("text/xml; charset=utf-8");
var response = httpClient.PostAsync(url, request).Result;
return response;
}
}
catch (Exception ex)
{
throw new InvalidPluginExecutionException(ex.Message);
}
}
private static HttpWebRequest CreateWebRequest(string url, string action)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
//var ClientID = "******";
//var Secret = "******";
//var byteArray = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(ClientID + ":" + Secret));
webRequest.Headers.Add("SOAPAction", action);
webRequest.ContentType = "text/xml";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
//webRequest.Headers.Add("Authorization", "Basic " + byteArray);
return webRequest;
}
private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
{
using (Stream stream = webRequest.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
}
}
}