Biztalk schema exposing as WCF service with multiple operations

Hi,
I am working on a design pattern to expose the BizTalk schema as a WCF service and thought of taking expert’s advice. I have a single schema with 30 different nodes and each one is a different message type. For this 30 message types we need to expose WCF
endpoints to customer for consuming from their application.
When I exposed this schema as WCF service, a single receive location got created in BizTalk application and in IIS there is one .svc file. I defined 30 operations for this while exposing the endpoint with wizard.
Currently I came up with the below 2 approaches but I did not like them as there is more redundancy
Create 30 different orchestrations and each orchestration subscribes to Message Box direct binding with message type as filter.
Create a single orchestration that binds to single receive location( this location got created by wizard..) and access the operation/message type in the expression shape. Based on this value create 30 IF conditions for each message type. For this the
single orchestration receive shape should have a message type of xml document and then access the type. Is it possible?
I don’t like the above approaches as it is very difficult to maintain and also difficult to add for any new message type.
Does anyone has good ideas for doing this?
Thanks
JB

"Canonical Schemas" are used where multiple source messages need to be addressed by a SINGLE Operation !!!
Every operation anyway translates to a separate process. Forget that we're dealing with BizTalk for a minute, when you're writing plain we services, you introduce new service contracts (operations) when you deal with different data contracts. To come back,
in BizTalk your data contracts are your schemas. So when you have multiple schemas, each requiring different processing then you need different orchestrations.
Let us for a minute assume you've defined a single service schema (very possible with a service header and a service details where the service data contract could differ). Now you use this schema to expose ONE service endpoint (good till now). In that service
you're suggesting to ADD decisions (something like a switch statement where you'll do 'x' set of activities is the message is of 'x' type and so on... How is this sustainable? Every time you introduce an new operation, you'll have to tear down and redeploy
the new orchestration which will affect all other operations. During the introduction of ONE op you may touch other parts of the orchestration (multiple branches in a parallel shape anyways make the orchestration very unwieldy from a code management/support
standpoint) and introduce errors in existing ops.
Regards. 

Similar Messages

  • BIzTalk schema exposed as wcf service deployment in WIndows server which dont have bizTalk installed

     Hi All,
    I am deploying my Biztalk wcf service (exposed from Schema) in SIT environment which dont have BizTAlk installed. But BizTalk is installed in One server and Webservices are there in another server.
    When I browse the service, it is throwing errors as below.
    Retrieving the COM class factory for component with CLSID {9D0E435E-4CCE-4536-83FA-4A5040674AD6} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    [COMException (0x80040154): Retrieving the COM class factory for component with CLSID {9D0E435E-4CCE-4536-83FA-4A5040674AD6} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).]
       Microsoft.BizTalk.Adapter.Wcf.Runtime.TransportProxySingleton..cctor() +23
    So please advise me on this. Am I going in correct way? Is it possible like this or do we need to install BizTalk for BizTAlk wcf services also in that environment?
    Thanks in Advance

    Hi,
    If you wish to deploy BizTalk WCF services onto another server, you can do so but you need to install BizTalk
    there. This is needed because some dlls are needed for the BizTalk WCF services such that it can point effieciently to the receive location in another server (where actual BizTalk application is running). Also the BizTalk runtime is needed in the other server
    and hence you need to just install BizTalk on the other server.
    Now if your other server is in the DMZ, then you might not go with the above option of installing BizTalk
    over there. In that case you need to install Microsoft ISA server (Internet Security and Application Server) and configure your DMZ with that. In that case you can host your BizTalk WCF services over there and make it point to the actual receive locations
    on your BizTalk server.
    Rachit
    Please mark as answer or vote as helpful if my reply does

  • Dynamic routing for a Business Service with multiple operations

    I have two business services with multiple operations. Business service A (bsA) has operations OpA1 and OpA2. Business service B (bsB) has operations OpB1 and OpB2.
    Depending on incoming Proxy message and operation, I have to do one of the following
    1. If someValue = A and operation= Op1 then invoke operation opA1 of bsA
    2. If someValue = B and operation= Op1 then invoke operation opB1 of bsB
    3. If someValue = C and operation= Op1 then invoke operation opA1 of bsA AND* operation opB1 of bsB and return aggregate data of both invocations
    1. If someValue = A and operation= Op2 then invoke operation opA2 of bsA
    2. If someValue = B and operation= Op2 then invoke operation opB2 of bsB
    3. If someValue = C and operation= Op2 then invoke operation opA2 of bsA AND* operation opB2 of bsB and return aggregate data of both invocations
    Using a dynamic route node or dynamic routing options, I am able to achieve cases 1, 2, 4, and 5.
    But for cases 3 & 6, I can not use a route node. When I use a Service call out instead, then I am forced to create a Operational branch but that does not seem like the best design since for every new operation added to the business services, I have to add a new branch to the Operational branch and redo all the functionality for that branch.
    Basically, I am looking to achieve the functionality of the Route node ( no need to specify the operation ).
    Any thoughts/ideas on what the best design would be?
    thanks

    For cases 3 & 6, why don't you route to another proxy service where you can simple do two service callouts, merge output data somehow and return them to the first proxy?
    If you look for "special route feature", that could possibly call two services for a single message, I'm afraid you won't succeed.

  • WebService with multiple operations [JCD as WebService]

    Hi,
    I am using JCAPS 5.1.1.
    My requirement is, i need to create a JCD (callable as external soap Webservice) which has multiple operations.
    While creating jcd user will be prompted for input,output message and operation name.
    But here we can give only one operation. In this case if i want multiple operations to be performed in single JCD what i have to do.
    I tried adding methods manually, to that JCD. After this i build it and deployed. When i check the generated WSDL in UDDIdocs directory
    manually added methods to jcd were not present in WSDL file at all.
    Only one operation name was present that too which i gave at time of creating JCD.
    Hence if i want to expose JCD as webservice with multiple operations what i have to do.
    Please help me.
    Regards
    Venkatesh.S

    Hi,
    I tried do the same, but I was imposible.
    In this case I do a bussines process, which implement a wsdl, and the logic all was solved in a java collaboration. That is my jcd was called from bp.
    So my wsdl has four operations and my java collaboration receive on the input message operation name, so my java collaboration evaluate this operation and process request.

  • Error calling a BizTalk WCF Service with WCFTestClient

    I have published schema as a wcf service (WCF-CustomIsolated). I can browse to the wsdl from the local server and from my PC. I can call the service from a console application running on my pc, but when I attempt to add the service from the wcf test client,
    I get the message:
    Warning: No code was generated.If you were trying to generate a client, this could be because the metadata documents did not contain any valid contracts or servicesor because all contracts/services were discovered to exist in /reference assemblies. Verify
    that you passed all the metadata documents to the tool.Warning: If you would like to generate data contracts from schemas make sure to use the /dataContractOnly option.
    Was there a configuration step I missed?

    Hi Jeremy, probably not a configuration issue. I remember reading somewhere the inability of the client to consume the service in such scenarios. I am assuming metadata publishing is enabled. Will try and search the article I read.q
    Praveen Behara
    MCST : BizTalk Server 2006 R2, 2010
    Yup, metadata publishing is enabled. I can browse to the wsdl.   This is a pure message solution, so I'm using a custom disassembler pipeline component to receive the request and generate a response.  When the wcf test client tries to add
    the service, the execute method of my pipeline fires, which seems odd to me, because we're not actually making a request at this point,  only trying to get the meta data I would think.
    When adding the service, wcf test client's request has an action of
    http://schemas.xmlsoap.org/ws/2004/09/transfer/Get with an empty body like this:
    POST http://myserver/MyService/test.svc HTTP/1.1
    Content-Type: application/soap+xml; charset=utf-8
    Host: myserver
    Content-Length: 512
    Expect: 100-continue
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
    <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action>
    <a:MessageID>urn:uuid:8bd3f321-0a94-44f1-9eb4-5575068cc408</a:MessageID>
    <a:ReplyTo>
    <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">http://myserver/MyService/test.svc</a:To>
    </s:Header>
    <s:Body/>
    </s:Envelope>
    I'm assuming somehow the BizTalk receive location would have to be configured to behave differently under this circumstance instead of passing the message to the pipeline component...

  • Services with multiple account assignment.

    Hi all,
    How can I find out the POs which are having the multiple account assignment for the service line items from tables ?
    I am looking for services with multiple account assignments
    Regards

    Hi
    Go to SE16 , give table name -EKPO
    Now if you have purchase order nos with you then copy paste the PO numbers here , or select company code or site to restrict your entries. It will control the performance of the data execution.
    Then execute this (remove max no 200 ) . Go to Settings-- Format List -- Choose fields. Deselect all and select fields as per your requirement.If field names are coming in technical names you can change this via settings--User parameter and select -Field Label.
    You can extract this report to excel as well. Same PO number with all account assignment category.
    Please note if you have high volume of data then extract all the POs under service orders first from EKKO table and copy all the service PO numbers availbvale and paste in table EKPO, it will increase performance as well.
    Cheers
    Mukta

  • Web service with multiple out parameters

    Hi Developers,
    I have been playing around with som web services in the developer studio.
    I can create a webservice from a normal ejb.
    But i can only get one out parameter, which is the return parameter of the ejb.
    I tried to make an object to use as return parameter, but then i couldn't use the method for the web service.
    Can anyone tell me how to make a web service with multiple out parameters?
    Br Rasmus

    Hi Developers,
    I have the same question, is it possible to have multiple outgoing parameters?
    When not, does SAP Netweaver knows a IN-OUT parameter? Because I found on the internet that it is possible to have a IN-OUT parameter. But that was with the BEA Weblogic 8.x.
    When not, is then the only solution to return a object? With in this object all the parameters you want.
    Or otherwise is there a other workaround?
    Thanks in advance,
    Marinus Geuze

  • Problem initiating process with multiple operations using HTTP/SOAP

    Hi,
    I have defined a process which has multiple operations. My process starts with a pick activity containing onMessage branches for each possible operation. When I initiate this service using the BPEL console, I choose one of the operations and everything works fine.
    However, when I initiate this process using an HTTP/SOAP web service call using JMeter, always the first branch is executed regardless of the message I send.
    My operations are document/literal. Due to some restrictions, I cannot define a SOAPAction for the operations. Could this be the problem? Is there a workaround for this? If this is not the problem, what could be the cause?
    I'm using version 10.1.2.1.
    Any help will be appreciated. Thanks in advance..

    hi i am using 10.1.3 and still i can not initiate a process with multiple operations. Is there anybody to tell if pick activity works fine and if there are some points to consider?
    If there is a problem is there any solution to make a process with multiple operations?

  • Problem in creating Maintenance Order with multiple operations

    Hello all,
    I am facing problem while creating Maintenance Order with multiple operations and sub-operations. I am using BAPI : BAPI_ALM_ORDER_MAINTAIN.
    For single operation it is working fine,but i am unable to create MO with multiple operations and sub-operations.
    Please, provide me the inputs required,
    I have used methods :
    ORDER        CREATE,
    OPERATION CREATE
    and SAVE.
    Regards,
    Siddhartha

    Hi,
    The FM you are using is a perfect one. This FM is bit tricky to use. You need to perfectly pass the Reference number field. which links various input table parameters of this FM.
    Thanks & Regards,
    Navneeth K.

  • Expose an orchestration as WCF service with a Request-Response port set to Direct Binding

    Hello , 
      I'm trying to expose an orchestration as a WCF service (while the Request-Response port is set to Direct binding) . Is this possible ? (the issue will be correlating back the response to the synchronous WCF request after the response is posted back
    to the Message Box by the Direct Send logical port).
    I have no problem in exposing the orchestration while I'm setting the Binding port to 'Specify Later' (What I'm trying to do actually is to expose a orchestration using different adapters (like Http and Wcf ) in the same time ).
    Thanks

    Yes, you can publish an orchestration as WCF/Web service which has direct bound request-response port.
    Subscription works based on “EpmRRCorrelationToken”
    and “RouteDirectToTP”. When you enlist the orchestration which
    has the direct bound request-response port (also published as service), its subscription are based on above two context properties and they take care of correction.
    And also the response matches to the request part of the port due to the nature of two-way communication protocol.
    Create an Orchestration with direct-bound request-response port and publish it as service. This will work. Give it a try
    Regards,
    M.R.Ashwin Prabhu
    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

  • BizTalk 2010 Error consuming WCF service metadata. Object reference not set to an instance of an object.

    "Error consuming WCF service metadata.
    Object reference not set to an instance of an object."
    I have no clue what happen to my BizTalk.  I checked all the below forum but m clueless why BTS not consuming WCF through Generated Items. I tried both metadata exhange endpoint and metadata file through
    svcutil. but all my wcf services are working fine with .net C# client.
    http://blogs.msdn.com/b/appfabriccat/archive/2010/11/23/how-using-duplex-mep-to-communicate-with-biztalk-from-a-net-application-or-a-wf-workflow-running-inside-appfabric-part-1.aspx
    http://msdn.microsoft.com/en-us/library/bb226552.aspx
    http://msdn.microsoft.com/en-us/library/bb798122.aspx
    http://masteringbiztalkserver.wordpress.com/tag/wcf-service-consuming-wizard/
    I reinstall the WCF lob Adapter SDK to my BizTalk VM but still no clue. no erros in event viewer nothing.
    http://www.abdulazizfarooqi.wordpress.com Abdul Aziz Farooqi [BizTalk & SharePoint Consultant] MCPD Web & MCPD SharePoint 2010

    Thanks from me too Neal - this worked from me. I wan't able to consume directly from exchange because the certificate is broken. However, I was able to convince Google Chrome to let me view the /Services.wsdl and from there I could save the .wsdl and two
    .xsd files. In my case the problem lay at the top of the .wsdl file. I changed the following:
    <wsdl:types>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:import namespace="http://schemas.microsoft.com/exchange/services/2006/messages" schemaLocation="messages.xsd"/>
            </xs:schema>
    by giving the same targetNamespace as assigned in the <wsdl:definitions element, so I ended up with
    <wsdl:types>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/exchange/services/2006/messages">
                <xs:import namespace="http://schemas.microsoft.com/exchange/services/2006/messages" schemaLocation="messages.xsd"/>
            </xs:schema>

  • Two way WCF Service with default response

    Hello All,
    I have one schema that i need to expose as a WCF-Service. However, i want to send a response back to the caller (default response). This is just to acknowledge the caller.
    Now how to create a two-way service that sends a default response always?
    I can do this by creating a new response schema and defaut some value for that particualr field.
    But without creating the response schema, is that possible to send response back to the caller?
    Thanks
    SKGuru

    Hi
    I was reading
    this article.
    As per my understanding ,I would try following
    Create a request schema
    Create a response schema ( any basic structure just a template to publish)
    Use the Wizard to publish the schema
    I would use my service operation method as "two way"
    I will select the request schema as Request
    It will select the response schema as response
    It will generate a request response, two way receive port
    I will write a custom pipeline to generate a blank response and try to configure it on the response. I think as per the notes we can configure the custom pipelines as notes says:
    When using the wizard to create receive locations, the wizard creates the receive locations using the default values. The default value for the receive pipeline is the
    Microsoft.BizTalk.DefaultPipelines.PassThruReceive pipeline. If messages received through the published WCF services require any special pipeline processing (for example, validation, correlation/property promotion, or inbound/outbound maps)
    then you should set the receive pipeline to Microsoft.BizTalk.DefaultPipelines.XMLReceive, or to a custom pipeline by using the BizTalk Administration console.
    I will try this and let you know.
    HTH, Naushad (MCC/MCTS)
    http://alamnaushad.wordpress.com, My New TechNet Wiki Article
    “BizTalk Server: Performance Tuning & Optimization"
    If this is
    helpful or
    answers your question -
    please mark accordingly! Please
    "Vote As Helpful" if this was useful while resolving your question!

  • Web services with multiple elements in the results

    We are using ASP.Net and LiveCycle Forms with LiveCycle Designer 7.0. LiveCycle forms is running on JBOSS (turnkey installation). Our problem is that if the web service returns multiple results e.g.
          £12.99
          Widget
          £0.99
          Grommett
    The form does not grow to accommodate the extra results. Has anyone had any experience of this issue. Adobe say it can be done but so far we have had no luck.

    <[email protected]> ha scritto nel messaggio <br />news:[email protected]..<br />> We are using ASP.Net and LiveCycle Forms with LiveCycle Designer 7.0. <br />> LiveCycle forms is running on JBOSS (turnkey installation). Our problem is <br />> that if the web service returns multiple results e.g.<br />> <products><br />>   <product><br />>      <price>£12.99</price><br />>      <description>Widget</description><br />>   </product><br />>   <product><br />>      <price>£0.99</price><br />>      <description>Grommett</description><br />>   </product><br />> </products><br />> The form does not grow to accommodate the extra results. Has anyone had <br />> any experience of this issue. Adobe say it can be done but so far we have <br />> had no luck.<br /><br />You have to create a subform that has flow content, then flag "repeat the <br />subform for each data item" (or something similar, I've not Designer <br />installed on this machine). Remember to save as dynamic PDF.<br /><br />Bye,<br />Alessio

  • Mapping in Services Interface with multiple operation... ?

    Hi ALL,
    I have a SOAP to SOAP scenario here Just PI 7.1 with EHP1 acting a bus no mapping nothing .
    1) I have the WSDL file from the receiver system with multiple synchronous operations  in it ..i imported the wsdl as External Definition .. i used the same the WSDL file to create the sender Service interface also...
    when i created the service interface with the operation in it , i just gave the same operation name from the WSDL.this i followed for the sender and receiver service interface.
    1)now the issue is do i need any operation mapping if the service interface has more than one operation ...?
    2) I compelted the scenario without any operation mapping ..but i am getting this error ..Problem occurred in receiver agreement for sender -ICRM_D to receiver -EXACTTGETWEBSERVICE_D,http://ICRMtoExactTaetWebservice.com.si_os_ICRM_EXACTTETWEBSERVICE: No standard agreement found for , ICRM_D, , EXACTTARGEBSERVICE_D, http://ICRMtoExactarebservice.com, si_os_ICRM_EXACGETWEBSERVICE..?
    pls help me in this issue..
    Thanks
    Souz

    you might want to read this /people/shabarish.vijayakumar/blog/2010/09/08/service-interface-and-multiple-operations--is-it-just-an-hype
    you will need to create additional configurations for multiple operations to be supported

  • Having trouble with creation of a cloud service with multiple virtual machines using java sdk.

    I am creating a cloud service on azure with 2 virtual machines using java sdk API. Service created successfully.
    My input endpoint details are as follows.
    INPUT ENDPOINTS
    Head : 191.238.144.47:2400
    Head : 191.238.144.47:22
    Node0 : 191.238.144.47:43211
    For Head instance port 2400 is for HTTPS and port 22 is for SSH and for Node0 instance port 43211 is for SSH.
    But I am having problem with doing a ssh on Head instance. Sometimes it works sometimes doesn't. Same problem with HTTPS also.
    I have some application running over there but when i try to access it thru browser sometimes it works but most of the time doesn't. When I restart the instances from azure portal, its works after
    that(not always but most of the time). 
    Now I am confused what is going on there. I am creating cloud service and virtual machines using java sdk and setting input endpoints also. After creation of all instances i restart every instance programmatically .
    I am not sure whether restart is required or not. It must be something to do with input endpoints only but not able to get the right thing i guess. When i do the same thing thru azure portal(creation of cloud service with virtual machines and setting up input
    end points) everything works fine but not achieving the result when implementing it by java sdk API. Please help me.

    HI Nithin,
    Thanks for your reply. I am setting the endpoints after creating my instances using update call. Here's the code snippet.
    AzureService aServ = new AzureService(session);
     if(aServ.checkNameAvailability(clusterName)) {
               aServ.createHostedService(clusterName, "dbX cluster");         
             // Creating head instance
             aServ.createHead(clusterName, imgName, headType, userName, pswd);  
            // Setting end points for head node
             String name = "ssh";
             int port = 22;
             aServ.updateVMInputEndpoint(clusterName, "Head", name, port);
             // Restarting head instance
             aServ.restartVM(clusterName, "Head");
           String roleName = "Node";
           String tmpRoleName = "";
           for(int i=0; i<noi; i++) {
                      port = 43210+(i+1);
                      tmpRoleName = roleName + i;
                   // Creating node instance
                    aServ.createVM(clusterName, tmpRoleName, imgName, nodeType, userName, pswd);
                  // Setting end points for node instance
                   aServ.updateVMInputEndpoint(clusterName, tmpRoleName, name, port);
                  // Restarting node instance
                 aServ.restartVM(clusterName, tmpRoleName);
          // Method to update the input endpoint details 
          public void updateVMInputEndpoint(String clusterName, String vmName, String name, int port)
            throws Exception {
                    VirtualMachineGetResponse resp = computeManagementClient.getVirtualMachinesOperations().
                                                            get(clusterName, clusterName, vmName);
                    VirtualMachineUpdateParameters updateParameters = new VirtualMachineUpdateParameters();
                    //get the configuration list
                    ArrayList<ConfigurationSet> configlist = resp.getConfigurationSets();
                    //get inputendpoint list and update it
                    ArrayList<InputEndpoint> endpointlist = configlist.get(0).getInputEndpoints();
                    InputEndpoint inputEndpoint = new InputEndpoint();
                    inputEndpoint.setEnableDirectServerReturn(false);
                    inputEndpoint.setPort(port);
                    inputEndpoint.setLocalPort(port);
                    inputEndpoint.setName(name);
                    inputEndpoint.setProtocol(InputEndpointTransportProtocol.TCP);
                    endpointlist.add(inputEndpoint);
                    // Open port for https on head node
                    if(vmName.equals("Head")) {
                            inputEndpoint = new InputEndpoint();
                            inputEndpoint.setEnableDirectServerReturn(false);
                            inputEndpoint.setPort(2400);
                            inputEndpoint.setLocalPort(2400);
                            inputEndpoint.setName("https");
                            inputEndpoint.setProtocol(InputEndpointTransportProtocol.TCP);
                            endpointlist.add(inputEndpoint);
                    updateParameters.setConfigurationSets(configlist);
                    //required for update
                    OSVirtualHardDisk osVirtualHardDisk = resp.getOSVirtualHardDisk();
                    updateParameters.setOSVirtualHardDisk(osVirtualHardDisk);
                    updateParameters.setRoleName(resp.getRoleName());
                    OperationResponse updtResp = computeManagementClient.getVirtualMachinesOperations().update(clusterName, clusterName, resp.getRoleName(), updateParameters);
    And every time i am creating a new cloud service along with head and node instances. Region is "South Central US".
    I am setting ProvisionGuestAgent field to true at instance creation time. Thank you.

Maybe you are looking for

  • I have an iPod Classic. Is it compatible with the iCloud?

    Ok, I uploaded some photos of my grandson on my iPod from a friends computer. This was, of course, when I did not have a computer of my own. I have since moved away and no longer are in contact with said friend. I now have a new computer and want to

  • Migrating JHeadstart 10.1.2 Application to 10.1.3 doesn't work in JDev1013

    Just for your information: Migrating JHeadstart 10.1.2 Application to 10.1.3.3.0, JHS version 10.1.3.2.52 didn't work. I used the release notes but got stuck at step no. five. The function "Edit Application Definition" was greyed out. Actually, it di

  • Using generated wsdl file to other scenario

    Hi...     I have done one scenario like giving Input File:  Fname,Lname,Address Output file: FullName,address. using BPM. After doing the sceanrio i have generated the wsdl file. I have tested the wsdl file using infopath.It is working fine. Then i h

  • Constantly getting pop-ups from Itunes!

    Constantly getting pop-ups from Itunes!

  • New image generates too long

    Hi, I'm making a storyboard in PS and have been creating seperate psds for every shot but now the new document generates a much longer image then I set in the parameters. It has done this before and I would just generate a new one and after a few tri