I have been exposing orchestrations and schemas as WCF Web Services and I've been struggling recently in submitting messages to those web services.
The usual approach I use is to create a test harness (a console app or win forms) and create a service reference to it. Then I go through the steps of creating the request message. My particular issue was trying to create an envelope with an embedded message.
I already had a sample XML message that worked and I found this excellent post which explains how to post an XML message to a WCF Web Service in BizTalk. No service reference is required and there are very few lines of code. I'm going to use this method a lot more particularly where I have big messages because setting the value of each element can be time consuming.
Follow the steps in the post because they worked for me. I'm reposting because I wanted to include the code for submitting to a WCF with basicHttp binding. Note the all important MessageVersion which must be set to Soap11.
public class SendBizTalk
{
[ServiceContract()]
private interface IBizTalkSubmission
{
[OperationContract(Action = "*", ReplyAction = "*")]
void Submit(Message msg);
}
static void Main(string[] args)
{
XmlTextReader xmlrdr = new XmlTextReader(@"C:\Projects\Test\FedESB.Test1\Envelope2.xml");
Message msg = Message.CreateMessage(MessageVersion.Soap11, "*", xmlrdr);
string uriLocationEsbOnRamp = "http://localhost/FedESBWcfService2/Receive.svc";
BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.None;
EndpointAddress epa = new EndpointAddress(uriLocationEsbOnRamp);
IBizTalkSubmission proxy = ChannelFactory<IBizTalkSubmission>.CreateChannel(b, epa);
proxy.Submit(msg);
}
}