BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式
BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多種供客戶端調用方式
BizTalk Server 2006 R2開始支持WCF adapter本次Demo用的是BizTalk Server 2010,把一個簡單的流程發布成一個WCF服務供客戶端調用。
有了wcf-custom adapter解決BizTalk和外部交互必須借助第三方協議進行,比如FTP,MSMQ,HTTP(IIS),database,現在通過BizTalk發布in-process的wcf就可以,變得非常方便簡單。
BizTalk流程設計
流程很簡單一個雙向的接收端口,實現Request-Response的請求;
Deploy到BizTalk Server ,利用BizTalk WCF Service Publishing Wizard發布WCF服務。
利用BizTalk WCF Service Publishing Wizard發布服務的操作就不說了,只能發布Host在IIS上生成BizTalkServerIsolatedHost Receive Port的配置和一個WCF的接口服務。
?
發現發布IsolatedHost服務比較麻煩必須安裝IIS才可以用,其實WCF Adapter支持Host In-Process,如圖
配置In-Process WCF-Custom Receive Location
配置成功了
客戶端調用發布的服務
如果根據默認 svcutil.exe http://localhost:1100/service?wsdl 生成的Proxy類和Endpoint config 調用服務基本的代碼如下:
//TwoWayAsyncClient client = new TwoWayAsyncClient();string requestBody="<ns0:Request xmlns:ns0=\"http://BizTalkExposeWCF.Request\"><Record><Field1>Field1_0</Field1></Record></ns0:Request>";//MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(requestBody));//XmlReader reader = XmlReader.Create(new System.IO.StringReader(requestBody));//Message request = Message.CreateMessage(MessageVersion.Default, "BizTalkSubmit", reader);//Console.WriteLine(request);//Message response= client.BizTalkSubmit(request);?
?
根據這樣的代碼肯定會報錯System.NotSupportedException: Specified method is not supported.
報錯原因是不知道BizTalk流程的接收端口發布的具體contract 生成的Proxy里沒有。
解決這個問題的辦法是使用BizTalk WCF Service Publishing Wizard發布的IIS服務生成的Proxy代理來Call這個服務就可以解決這個問題
? ?
BizTalkExposeWCF_FlowProcess_ExposePortClient client = new BizTalkExposeWCF_FlowProcess_ExposePortClient();//TwoWayAsyncClient client = new TwoWayAsyncClient();string requestBody="<ns0:Request xmlns:ns0=\"http://BizTalkExposeWCF.Request\"><Record><Field1>Field1_0</Field1></Record></ns0:Request>";//MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(requestBody));//XmlReader reader = XmlReader.Create(new System.IO.StringReader(requestBody));//Message request = Message.CreateMessage(MessageVersion.Default, "BizTalkSubmit", reader);//Console.WriteLine(request);//Message response= client.BizTalkSubmit(request); Request request=new Request();request.Record = new RequestRecord();request.Record.Field1="request";Response response = client.Operation_1(request);Console.Write(response.Result.Field);Console.ReadLine();client.Close();?
?
直接使用http Post調用WCF服務
如果你覺得這么做還是麻煩,那么還有一種最簡單的方法來實現交互。直接通過http Post把request message Post進流程并且接收response message
只需要修改一下receive Location配置
客戶端使用Fiddler模擬
?
是不是很簡單。
希望對大家有幫助
總結
以上是生活随笔為你收集整理的BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闲鱼如何让人看不到动态(如何看待闲鱼取消
- 下一篇: 怎样下载水印相机app