zoukankan      html  css  js  c++  java
  • BizTalk Orchestration Publish Host InProcess 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模拟

    是不是很简单。

    希望对大家有帮助

  • 相关阅读:
    Python升级3.6 强力Django+Xadmin打造在线教育平台
    第六模块:WEB框架开发 第1章·Django框架开发1~50
    阿里云主机(ECS)与CentOS7实战
    Django入门与实战
    第五模块:WEB开发基础 第2章·JavaScript基础
    第五模块:WEB开发基础 第1章·HTML&CSS基础
    第四模块:网络编程进阶&数据库开发 第2章·MySQL数据库开发
    阿里云ECS云服务器CentOS7.4下安装MySQL5.7.13、JDK1.7.80、Mycat1.6.5、Redis3.2.10、Nginx1.14.0以及Tomcat7.0.72
    《百词斩·象形9000》第一册(上) 符号Symbol 1
    第三模块:面向对象&网络编程基础 第2章 网络编程
  • 原文地址:https://www.cnblogs.com/neozhu/p/3009607.html
Copyright © 2011-2022 走看看