HTTP adapter vs WCF-based adapter

i have a requirement working with third party CRM system . Right now they are offering SOAP web service and saying HTTP adapter works, but I want to go for advanced technology like WCF based adapters. Which option is better? HTTP or WCF-based?? if it is
WCF , what is the right WCF adapter to use. NOte: they are offering only SOAP.

Hi,
Off-course the WCF based option is better. And for your requirement you have to use WCF-BasicHttp adapter which is meant for ASMX-based
Web services and clients that conform to the WS-I Basic Profile 1.1.
SOAP VS WCF-BasicHttp Adapter points from MSDN article:
WCF adapters documents per second rate is general be better than SOAP adapter. 
SOAP adapter has the disadvantage of serializing and deserializing messages between .NET types and raw XML data which in some cases could result in unwanted data modification. WCF adapters take the approach of preserving the data stream. 
WCF adapters publish what is essentially the same schema as will be used in the BizTalk runtime. In contrast, SOAP adapter returns metadata generated by reflecting on the .NET classes generated to represent the schemas. Since .NET does not preserve
all the nuances of XSD schemas, the exposed WSDL may not accurately reflect the schemas used by the BizTalk runtime. 
It is easier to migrate from WCF-BasicHttp to WCF-WSHttp if needed.
Maheshkumar S Tiwari|User Page|Blog|BizTalk
Server : How Map Works on Port Level

Similar Messages

  • Error handling HTTP 400 in WCF-WebHttp adapter BizTalk 2013

    Hi!
    Does anyone knows how to catch HTTP errors when using WCF-WebHttp REST adapter in BizTalk 2013? I've looked into the article BizTalk
    Server: REST Services Error Handling, but that is for BizTalk 2010 using the WCF-Custom adapter.
    What I want is to catch the exception in an orchestration, and do some actions dependent on which HTTP error it is, i.e. HTTP 400.
    Idar H.

    Hi Idar,
    Welcome to BizTalk forum.
    From your description above, I don't have exact same scenario like yours, this scenario exposes a BizTalk Orchestration as a RESTful webservice using WCF-WebHttp, perhaps it will be good reference for you. See:
    http://blog.tallan.com/2014/09/29/wcf-webhttp-and-custom-json-error-messages/
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Moving from SOAP Adapter to WCF-basichttp adapter

    we are migrating the BizTalk server 2009 application into  BTS 2013.In The BTS 2009 application ,some of ports are configured with SOAP and SQL Adapters.
    So I recommended to customer that move from SOAP Adapter to WCF-BasicHttp and SQL to WCF-SQL.
    But customer asked me is that the best practice MS recommended for moving from SOAP to WCF-BasicHttp?
    Customer is asking let me explain few points why i have to move from SOAP to WCF-Http?
    Could you please help me how to convince him?
    Regards BizTalkWorship

    The SOAP adapter is deprecated in BizTalk Server 2010. You should use the WCF-BasicHttp to communicate with Web services and clients that conform to the WS-I Basic Profile 1.1. To communicate with Web services and clients that conform to
    WS-*, use the WCF-WSHttp adapter.
    Key benefits of WCF Framework
    Because WCF can communicate using Web services, interoperability with other platforms that also support SOAP, such as the leading J2EE-based application servers, is straightforward.
    . You can also configure and extend WCF to communicate with Web services using messages not based on SOAP, for example, simple XML formats like RSS.
    . Performance is of paramount concern for most businesses. WCF is developed with the goal of being one of the fastest distributed application platform developed by Microsoft.
    . To allow optimal performance when both parties in a communication are built on WCF, the wire encoding used in this case is an optimized binary version of an XML Information Set. Messages still conform to the data structure of a SOAP message, but their
    encoding uses a binary representation of that data structure rather than the standard angle-brackets-and-text format of the XML 1.0 text encoding. Using this option makes sense for communicating with the call center client application, because it is also built
    on WCF, and performance is an important concern.
    . Managing object lifetimes, defining distributed transactions, and other aspects of Enterprise Services are now provided by WCF. They are available to any WCF-based application, which means that the rental car reservation application can use them with any
    of the other applications it communicates with.
    . Because it supports a large set of the WS-* specifications, WCF helps provide reliability, security, and transactions when communicating with any platform that also supports these specifications.
    . The WCF option for queued messaging, built on Message Queuing, allows applications to use persistent queuing without using another set of application programming interfaces.
    Thanks
    Abhishek

  • Biztalk 2013 WCF-WebHTTP Adapter - Outbound HTTP Headers

    Hi
    I have a requirement to connect to a service using the WCF-WebHTTP adapter that requires authentication to be passed in the Headers.
    A usercode and password is sent in the intial header and a security token is returned in the response header.
    This security token is then used in the header of each subsequent call to the service.
    I could not find anything in the documentation about getting and setting the "HTTP Header" data using maps or variables or using variables in the "Outbound HTTP Headers" on the adapter transport properties.
    Any help on this would be gratefully received.
    Malcolm

    You can set the outbound HTTP header in WCF-WebHTTP adapter by 2 ways
    1) At adapter level Change adapter properties
    2)Changing Message context property at Orchestration or at pipeline
    Its been well documented here
    http://blog.codit.eu/post/2013/04/30/Using-HttpHeaders-with-WCF-WebHttp-Adapter-on-Biztalk-2013.aspx
    Thanks
    Abhishek

  • Using WCF Cutom Adapter to return CLOB (or similar)

    Hi all,
    I am trying to return mulitple sets of data from an Oracle table each of which exceed VARCHAR2(4000).
    I wish to do this in one call to a stored procedure as the intention is to assign the returned data to a messages body parts so that I can send them as multiple seperate attachments to an email (using the SMTP adapter).
    My oracle stored procedure and returned data types are as follows:
        PROCEDURE get_job(
            po_job_id OUT jobs.job_id%TYPE, po_endpoint OUT data.endpoint%TYPE,
            po_job_type OUT job_types.job_type_id%TYPE, po_data OUT rec_data_table);
        TYPE rec_data_table IS TABLE OF rec_data
           INDEX BY BINARY_INTEGER;
        TYPE rec_data IS RECORD (
            data CLOB
            --data VARCHAR2(4000));
    If I do restrict the data to VARCHAR2(4000), as shown commented out in the rec_data RECORD above everything works fine.
    However, to return anything larger I believe would require me to return a CLOB (even though I would probably only be returning data of a few MBytes not GBytes).
    Having tried this I get the following error:
    "The adapter "WCF-Custom" raised an error message. Details "Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-03113: end-of-file on communication channel
    Process ID: 499868
    Session ID: 201 Serial number: 33735 ---> Oracle.DataAccess.Client.OracleException: ORA-03113: end-of-file on communication channel
    Process ID: 499868
    Session ID: 201 Serial number: 33735"
    I am using Oracle 11gR2, BizTalk 2010 and the WCF adapter with oracle bindings.
    Researching this I find conflicting information:
    "LOB types: The WCF-based Oracle DB adapter provides rich support for BLOB, CLOB and BFILE types in tables and stored procedures/functions. The adapter also exposes special operations for streaming BLOB/CLOB/BFILE data in the WCF service model
    interface." Source: http://blogs.msdn.com/b/adapters/archive/2007/10/29/biztalk-oracle-adapter-vs-wcf-based-oracle-db-adapter.aspx
    “Due to the limitation of associative arrays, PL/SQL tables or PL/SQL tables of records that contain any of the following data types are not supported in the Oracle Database adapter:
    BFILE
    BLOB
    CLOB ……….”
    Source: http://msdn.microsoft.com/en-us/library/dd788520.aspx
    Also, this post (http://social.msdn.microsoft.com/Forums/en-US/303cc67c-5e01-4ecb-ba5c-184a1d73a7f7/biztalk-wcf-adpater-oracle-store-procedure-returning-clob?forum=biztalkediandas2) seems to indicate
    it is possible but there is no detail so not sure if it matches my requirements.
    I have also had a quick look at the
    Operate_LOB sample but not sure if this will provide me with the solution I am after as I really wanted to return an array of CLOBS (or similar).
    I have seen various other posts but nothing that definitively answers my questions and from my tests I would say that I can’t easily return largish amounts of data (a few MBs) in a single element
    from Oracle …. unless of course I am missing something.
    Can anyone give me a definitive answer as to whether I can do what I have set out above … if not I will turn my attention to a different solution.
    Many Thanks for any help/advice you can provide,
    Regards,
    Dave

    From your description, it can hardly give precise troubleshooting for this problem, you can
    consider opening a support case with us. Visit this link to see the various support options that are available to better meet your needs: 
    http://support.microsoft.com/default.aspx 

  • WCF wsHTTP adapter: How to control WS-A elements, attributes.

    Hello,
    we have a third party soap web service that we invoke using Biztalk BasicHTTP adapter.
    This wasn't working. 
    That's when we were told the web service is a Soap1.2 endpoint.
    So we have changed the adapter to wcf-wsHTTP adapter. This still doesn't work!!
    we get an error like:  Must Understand check failed for header
    http://www.w3.org/2005/08/addressing : To
    I traced the outgoing call from the adapter via Fiddler.
    I see this:
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
     <s:Header>
      <a:MessageID>urn:uuid:637ec5d5-f7c3-</a:MessageID>
      <ActivityId CorrelationId="b56a4554-c373-4479" xmlns="00000000-0000-0000-0000-000000000000</ActivityId">http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
      <a:ReplyTo>
               <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
      </a:ReplyTo>
      <a:To s:mustUnderstand="1">https://xxx.xxx/xx</a:To>
     if i change the mustUnderstand attribute to 0 in the To element, the web service returns
    the right response. This was tested using Fiddler.
    I understand the adapter is adding the headers like To,ReplyTo etc. but not sure
    why. How do i disable them getting generated? or How can i set the mustUnderstand to 0?
    Any suggestions please?
    thanks
    MS

    Hi,
    Refer the SOAP Header Action mustUnderstand Exception.
    Add the addressing annotation to the Web Service class @Addressing(enabled=true, required=true)
    Change namespaces in the <Envelope> tag from:
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    to
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing">
    Both SOAP 1.1 and SOAP 1.2 specifications enable you to use mustUnderstand attributes with SOAP headers. Not handling these headers properly is a common concern during Web service
    interactions.
    Refer: Understand the Famous "Did not
    understand MustUnderstand header(s)"Error
    Rachit
    Please mark as answer or vote as helpful if my reply does

  • How to get IDoc Status from WCF Service Adapter?

    I have successfully transfered a strong typed Idoc to SAP using a BizTalk WCF Service Adapter.  I did so based on this example:  [http://msdn.microsoft.com/en-US/library/cc185231(v=BTS.10).aspx].  We are using the IDoc to create a purchase order.  The IDocClient.Send(idoc, ref guid); method returns only a guid.  I can translate that using the SapAdpaterUtilities to a transaction ID.  When I look at the Idoc in WE02, I can see that it has status information which includes the purchase order number.  Is there any way for me to capture this status information in my .Net application when I send the IDoc?  Can I query the transaction ID?  Or do I just need to get the last PO Number through an RFC?
    Scott

    I ended up using the SAP .Net Data Provider in the Biztalk Adapter Pack to retrieve the PO Number.  Essentially when you pass the IDoc you won't get anything in return unless the file transfer fails.
    Scott

  • WCF-WebHttp Adapter Substituting Nonstandard Characters In Address URI With Web Encoded Equivalent

    I’m using the WCF-WebHttp adapter to send an HTTP Get request to a REST API. The request has to be formatted as shown…
    http://xxx.xxx.xxx.xxx/HPRMServiceAPI/Record?q=title:test*&format=json
    Essentially this is searching for any records with “test” in their title and returning a JSON formatted response containing information on any records that match the search criteria. I don’t have any flexibility in how this request is formatted. It has to
    confirm to the syntax above.
    If I hardcode the above uri in the Address URI field in the WCF-WebHttp adapter configuration and put a request through my BizTalk application, BizTalk correctly sends that request and I get my expected response.
    So far so good.
    The problem is the query portion of the request string (“?q=title:test*” in the example above) needs to be created dynamically based on what is specified in an incoming request to my BizTalk application. It may contain many search criteria and is not limited
    to just record titles as in my example.
    This, I thought would be straight forward: I construct the query portion of the request string in a custom send pipeline and insert that value into a promoted property which is then used by the URL mapping mechanic of the WCF-WebHttp adapter.
    So now the uri in the Address URI field in the WCF-WebHttp adapter configuration simply contains…
    http://xxx.xxx.xxx.xxx/HPRMServiceAPI
    And the remaining part of the request is defined using a URL mapping…
    <BtsHttpUrlMapping>
    <Operation Name="DocumentSearchRequest" Method="GET" Url="/Record{searchquery}" />
    </BtsHttpUrlMapping>
    Where the {searchquery} variable is mapped to a promoted property.
    I can see that my custom send pipeline is correctly promoting the property and that it contains the correct value (e.g “?q=title:test*&format=json”). The problem is that the WCF-WebHttp adapter is now substituting the “?” with its web encoded equivalent
    (%3F). When I view the outgoing HTTP request in Fiddler it looks like this…
    http://xxx.xxx.xxx.xxx/HPRMServiceAPI/Record%3Fq=title:test*&format=json
    I have tried numerous ways of constructing the HTTP request, including hardcoding the offending “?q=” section into the URL mapping rather than having it in the promoted property…
    <Operation Name="DocumentSearchRequest" Method="GET" Url="/Record?q={searchquery}" />
    But this results in other characters (“:”, “&”, “=”) being web encoded in the outgoing HTTP request. Fiddler shows this…
    /HPRMServiceAPI/Record/?q=title%3atest*%26format%3djson
    Similarly, hardcoding the “/Record?q=” section in the Address URI field in the WCF-WebHttp adapter configuration like this…
    http://xxx.xxx.xxx.xxx/HPRMServiceAPI/Record?q=
    …and having the URL mapping contain just…
    <Operation Name="DocumentSearchRequest" Method="GET" Url="{searchquery}" />
    …results in the following outgoing HTTP request (Fiddler shows “?q=” portion now being placed at the end of the request string)…
    http://xxx.xxx.xxx.xxx/HPRMServiceAPI/Record/title:test*&format=json?q=
    So in summary it seems the WCF-WebHttp adapter is struggling to correctly assemble the HTTP request string when a portion of it is supplied in a promoted property and used by the URL mapping mechanic. Specifically when that portion contains nonstandard characters
    (“?”, “:”, “&”, “=” etc), the WCF-WebHttp adapter substitutes them for their web encoded equivalent.
    Any suggestions?

    Thanks Ravindar,
    Unfortunately, I don’t have control of the ‘receive side’. I can’t write a custom pipeline component at the receive side as it is not a BizTalk application, it’s a 3rd party web site exposing REST-like behaviour.
    I have however made progress. It occurred to me the WCF-WebHttp adapter isn't the problem. It's doing exactly what it should by URL encoding any potentially 'unsafe' characters that have been 'injected' into the URL via a promoted property. Potentially the
    promoted property could contain malicious content, especially if that content has been sourced directly from text in an incoming message to BizTalk.
    So the WCF-WebHttp adapter is URL encoding ‘?’ to ‘%3F’ which is probably good behaviour from a security point of view.
    http://xxx.xxx.xxx.xxx/HPRMServiceAPI/Record%3Fq=title:test*&format=json is a perfectly valid address.
    So I looked again at the actual error I was receiving from the 3rd party site. It was…
    HTTP/1.1 400 Bad Request
    System.Web.HttpException: A potentially dangerous Request.Path value was detected from the client (?).
    So, after some research, I edited the web.config of the 3rd party site so it no longer excludes any specific characters from the request.
      <system.web>
        <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
      </system.web>
    The 400 Bad Request has gone away and the 3rd party site is processing my request now. Unfortunately it still seems to have an issue with ‘%3F’ being used in place of ‘?’, but I think that will have to be resolved in IIS/web config on the receive side (maybe
    by using request filtering
    http://www.iis.net/configreference/system.webserver/security/requestfiltering) or by discussing with the sites developers.
    In summary, I now believe the WCF-WebHttp adapter is behaving correctly by substituting URL encoded values in place of potentially unsafe characters.
    Thanks for your help.

  • Error while posting to Webservice using WCF-BasicHttp adapter

    Hi,
    I am getting the below exception when i am posting a request to a .asmx webservice using the Wcf-BasicHttp adapter.
    I am able to call the same service with the SOAP adapter successfully. Could you please let me know any resolutions for the same.
    The adapter failed to transmit message going to send port "MySendPort" with URL "http://myservice.com/Web.Services/service1.asmx". It will be retransmitted after the retry interval specified for this Send Port. Details:"System.ServiceModel.ProtocolException:
    The content type text/html; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes
    of the response were: '
    <html>
        <head><link rel="alternate" type="text/xml" href="/Web.Services/Service1.asmx?disco" />
        <style type="text/css">
            BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; }
            #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; }
            A:link { color: #336699; font-weight: bold; text-decoration: underline; }
            A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; }
            A:active { color: #336699; font-weight: bold; text-decoration: underline; }
            A:hover { color: cc3300; font-weight: bold; text-decoration: underline; }
            P { color: #000000; margin-top: 0px; margin-bottom: 12px; font-family: Verdana; }
            pre { background-color: #e5e5cc; padding: 5px; font-family: Courier New; font-size: x-small; margin-top: -5px; border: 1px #f0f0e0 solid; }
            td { color: #000000; font-family: Verdana; font-size: .7em; }
            h2 { font-size: 1.5em; font-weight: bold; margin-top: 25px; margin-bottom: 10px; border-to'.
    Server stack trace:
       at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)
    Exception rethrown at [0]:
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at System.ServiceModel.Channels.IRequestChannel.EndRequest(IAsyncResult result)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result)".
    Regards,
    Ujjwal
    -Ujjwal

    Where does the HTML indicate that the Service is not running??
    The error message " The content type text/html; charset=utf-8 of the response message does not match
    the content type of the binding (text/xml; charset=utf-8)" points to a bug in the WCF-BasicHttp described here:
    http://social.msdn.microsoft.com/Forums/en-US/11796bf5-ba6a-4878-977e-5c854642f67c/the-content-type-textxml-charsetiso88591-of-the-response-message-does-not-match-the-content?forum=biztalkgeneral
    Although not 100% the same, the conclusion here was to still use the old Adapter :-(
    Morten la Cour

  • Custom headers are not exported correctly in the bindings for the WCF-WebHttp adapter

    I have an annoying issue with the bindings for the WCF-WebHttp adapter.
    As you know, the "Messages" tab of the WCF-WebHttp transport properties enables a developer to configure a number of static outbound HTTP headers. When I've entered two or more headers in the textbox, the CRLF between individual headers will be
    stripped after a bindings import. This means I cannot call RESTful services that require more than one custom HTTP header in a messaging-only scenario, because BizTalk goofs up the configuration.
    For example, when I enter the following headers in the textbox:
    Then export the bindings, and immediately import the bindings again (untouched), the textbox now shows:
    I did some brief analysis, and within the binding file's XML, the HttpHeaders property (contained in the TransportTypeData element) is not encoded/escaped in any way, so therefore the significant whitespace (in this case CRLF) that needs to be preserved
    is lost in the import process.
    Can anyone reproduce this and can anyone think of a workaround (without resorting to an orchestration)?

    I did some brief analysis, and within the binding file's XML, the HttpHeaders property (contained in the TransportTypeData element) is not encoded/escaped in any way, so therefore the significant whitespace (in this case CRLF) that needs to be preserved
    is lost in the import process.
    +1

  • BizTalk 2009 WCF-SAP Adapter Could not load file or assembly 'Microsoft.Adapters.SAP.SAPGInvoker...' one of its dependencies error

    Hello,
    I have a BizTalk Server 2009 running on Windows Server 2003 x64. I am installing WCF-SAP adapter and have done the following for the same. However, I am getting an error as mentioned below when I click on the Configure button of WCF-SAP adapter in send
    port. I would appreciate if anyone could let me know how to fix this error and make the WCF-SAP adapter working.
    TITLE: BizTalk Server 2009 Administration Console
    Exception has been thrown by the target of an invocation. (mscorlib)
    ADDITIONAL INFORMATION:
    Exception has been thrown by the target of an invocation. (mscorlib)
    Could not load file or assembly 'Microsoft.Adapters.SAP.SAPGInvoker, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. This application has failed to start because the application configuration is incorrect. Reinstalling
    the application may fix this problem. (Exception from HRESULT: 0x800736B1) (Microsoft.Adapters.SAP)
    This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT: 0x800736B1)
    I have copied the following 32 bit & 64 bit unicode DLLs in SysWOW64 and System32 folders respectively.
    icudt30.dll
    icuin30.dll
    icuuc30.dll
    librfc32u.dll
    libsapu16vc71.dll
    libsapucum.dll
    Following r3dllinst DLLs are there in System32 folder.
    mfc42.dll
    mfc42u.dll
    mfc71.dll
    mfc71u.dll
    msvcp60.dll
    msvcp71.dll
    msvcp80.dll
    msvcr71.dll
    msvcr80.dll
    Following r3dllinst DLLs are there in SysWOW64 folder.
    mfc40.dll
    mfc40u.dll
    mfc42.dll
    mfc42u.dll
    mfc71.dll
    mfc71u.dll
    mfc80.dll
    mfc80u.dll
    msvcp50.dll
    msvcp60.dll
    msvcp71.dll
    msvcp80.dll
    msvcr71.dll
    msvcr80.dll
    I have the following softwares installed on the server.
    Microsoft Visual C++ 2008 Redistributable x64
    Microsoft Visual C++ 2008 Redistributable x86
    WCF LOB Adapter SDK (64-bit)
    BizTalk Adapter Pack 2.0 (64-bit)
    BizTalk Adapter Pack 2.0 (32-bit)
    The following bindings are also present in the machine.config under Framework\v2.0.50727\CONFIG and Framework64\v2.0.50727\CONFIG
    <system.serviceModel>
    <extensions>
    <bindingElementExtensions>
    <add name="sapAdapter" type="Microsoft.Adapters.SAP.SAPAdapterExtensionElement, Microsoft.Adapters.SAP, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </bindingElementExtensions>
    </extensions>
    <client>
    <endpoint binding="sapBinding" contract="IMetadataExchange" name="sap" />
    </client>
    </system.serviceModel>
    Thanks,
    Tarun

    Have you tried this?
    http://geekswithblogs.net/MoonWalker/archive/2013/07/17/could-not-load-file-or-assembly-microsoft.adapters.sap.sapginvoker.dll.aspx
    Morten la Cour

  • WCF-WebHttp Adapter issue?

    Hello guys
    I stumble on this problem while I was trying to develop a custom pipeline component that on runtime generates a GUID and affects it to the context and body of the message. That GUID is placed on Http Headers as a boundary (content type)
    and on the message body. What it happens is that, on the first message that I send, everything goes well (header GUID matches body GUID, the service response it’s not important here), after the first message all the following messages on the header will have
    the GUID from the first message that I send thought the port, although everything goes fine on the body. Like this:
    Request #1:
    Header: Content-Type: multipart/mixed; boundary=batch_bead1969-540e-4020-8b47-cf0fbcddef1c
    Body:
    bead1969-540e-4020-8b47-cf0fbcddef1ce
    Request #2:
    Header: Content-Type: multipart/mixed; boundary=batch_bead1969-540e-4020-8b47-cf0fbcddef1c
    Body:
    226dd0f5-501f-4da8-a871-b79e6ac512d0
    Request #3:
    Header: Content-Type: multipart/mixed; boundary=batch_bead1969-540e-4020-8b47-cf0fbcddef1c
    Body:
    98b7e6f9-c229-4a0b-a8f1-cd0c1f3e27e8
    As you can see in red, between multiple requests the GUID is always the same, and it shouldn’t be since on the body is changing correctly. After some analysis we realized that the problem was with the property “HttpHeaders” (WCF property
    schema), where we are writing the “content-type” in our custom pipeline component. It seems that for some reason the value of this property ain’t properly read after a first message went thought successfully.
    Why do I say successfully? Well…
    If there’s an error on send the message and the message gets dehydrated or suspended, the HttpHeaders seems to be “reseted” and read again, and everything goes as it should.
    If the message went to successfully regardless of the response, the issue that I describe will happen.
    Restarting the host instance seems to have no effect.
    Sometime after the first message went thought successfully, HttpHeaders seem to be “reseted” and read again. Although I don’t know how much time, at least something above 15min.
    Stop\Start the send seems to force an “reset” on the property.
    Just to make clear some eventual questions, HttpHeaders is correctly written into context before entering the adapter, after the message went thought the adapter, we can see on fiddler that the message isn’t as it should.
    I did some code to replicate this issue, and my Execute method on pipeline goes like this:
    public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(IPipelineContext pContext, Microsoft.BizTalk.Message.Interop.IBaseMessage pInMsg)
    Stream inMsgBodyStream = pInMsg.BodyPart.GetOriginalDataStream();
    pInMsg.Context.Write("HttpHeaders", "http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties",
    "content-type: multipart/mixed; boundary=batch_" + Guid.NewGuid().ToString());
    return pInMsg;
    I also try this behavior with the classic HTTP adapter, although another issues were raised, the fact is that Http Headers are correctly read between requests, so as far as we can tell this just happens with this adapter.
    Does anybody had similar issue? So far I haven’t found a solution.
    PS: I’m using Biztalk 2013 RTM
    Thanks

    Hey, someone else reported a similar issue with the WCF-WebHttp adapter for BizTalk 2013 - see this thread:
    http://social.msdn.microsoft.com/Forums/en-US/biztalkgeneral/thread/e477ad7a-505c-4f86-9556-8075d747e447. I will report your finding to Microsoft support.
    Thanks,
    If this answers your question, please use the "Answer" button to say so | Ben Cline

  • Biztalk 2013 Wcf-webhttp adapter Issue

    Hi
    I am trying to get WCF-WebHttp adapter working but it is ending  error.
    I created a service account with Bing api (can browse this url directly by providing login credentials)
    URL:
    https://api.datamarket.azure.com/Bing/SearchWeb/Web?Query='WA'
    These are my wcf-webhttp adapter settings
    URI
    https://api.datamarket.azure.com/Bing/SearchWeb
    http Method and URL Mapping
    <BtsHttpUrlMapping>
     <Operation Method="GET" Url="/Web?Query='WA'"/>
     </BtsHttpUrlMapping>
    it seems template matching is failing in wcf adapter as a result Outbound URL property is not getting promoted resulting below error.
    Can you please advice what is the missing piece in this configuration?
    Error Message:
    The Messaging engine failed to process a message submitted by adapter:WCF-WebHttp Source
    URL:https://api.datamarket.azure.com/Bing/SearchWeb. Details:The published message could not be routed because no subscribers were found. This error occurs if the subscribing orchestration or send
    port has not been enlisted, or if some of the message properties necessary for subscription evaluation have not been promoted. Please use the Biztalk Administration console to troubleshoot this failure.

    Hi
    Moreover I observed one more thing with another API if URI is brows able directly without Key it works
    Actual URL: https://ServerName/StoreMasterServices/Markets
    URI: https://ServerName/StoreMasterServices/
    Headers Info
    <BtsHttpUrlMapping>
    <Operation Method="GET" Url="/Markets" />
    </BtsHttpUrlMapping>
    This URI: https://ServerName/StoreMasterServices/    
    is brows able even without Key  (/Markets) and it is working fine.
    So Question is, is it mandatory to have URI brows able (with credentials if it needs)?

  • BizTalk 2010 - WCF-Custom Adapter with sqlbinding - rror was encountered while attempting to transmit the message

    BizTalk 2010 RTM version with SQL 2008 R2 .
    An intermittent issue with the WCF-Custom adapter with sqlbinding, calling a SQL stored proc as below
    Message gets suspended in BT Admin console  with "An internal server error was encountered while attempting to transmit the message" .
    Event log shows 
    A message sent to adapter "WCF-Custom" on send port "xxx" with URI "mssql://server/db?" is suspended.  Error details: Unknown Error Description 
    Any advice please. Thanks
    Sullu.
    http://biztalkguide.blogspot.com/ Please mark as answer if this solved the issue.Thanks

    Hi Chen
    Is there any update on this please ?
    I have applied the latest CU and have noticed the following issue.
    BizTalk 2010 Enterprise Edition with BizTalk 2010 CU6 and CU3 for BizTalk Adapter Pack works fine , no issues noticed.
    However ,
    On a DEV VM ,BizTalk 2010 Developer Edition with BizTalk 2010 CU6 and CU3 for BizTalk Adapter Pack still gives the error mentioned in this post.
    In addition Microsoft BizTalk Adapter Pack ,Microsoft BizTalk Adapter Pack(x64) & WCF LOB Adapter SDK are also installed .
    Below is the Error message.
    Message gets suspended in BT Admin console  with "An internal server error was encountered while attempting to transmit
    the message" .
    A message sent to adapter "WCF-Custom" on send port "xxx" with URI "mssql://server/db?" is
    suspended.  Error details:
    Unknown Error Description 
    Could you please check and advice what needs to be done to resolve this ? Thanks .
    Regards,
    Sullu
    http://biztalkguide.blogspot.com/ Please mark as answer if this solved the issue.Thanks

  • Polling using WCF SQL Adapter

    Hi - I have to develop this in BizTalk
    There is a table in SQL database where BizTalk needs to poll the data using WCF SQL Adapter.
    How and what query/stored proc do I need to write ?
    and how about polling interval should I mention.
    Is there any detailed blog or link which clearly explains this, will be helpful
    MBH

    The first thing that you should remember is that the most effective way of getting data from SQL would be if you could remove the records after reading them. This was something that the native SQL Server adapter supported. For WCF-SQL, the way to achieve
    this is to
    Create a SP which is what you will specify as the execute statement for your adapter. This SP would, on the basis of TOP 1, get the ID, read the record and delete it. Then it would return the read data. You will generate schemas for this SP and deploy them
    for subscribing to the received messages.
    You will create a query that returns the count of records from the said table which you will use as the polling query. This will ensure that the adapter uses this on the configured interval to see if data exists. If it exists, it would use the execute statement
    (invoking your SP) to get the data.
    There is an option to keep executing the SP while data is available. This ensures that if more than ONE record is inserted into your table, all the records would be picked up after the first polling interval (as opposed to poll, pick-up one, poll and then
    pick up the other, etc.). Be careful while setting the polling interval (you cannot go beyond 1 sec) since this depends on your SQL servers ability to process the data.
    With regards to documentation, I'd refer you to
    http://msdn.microsoft.com/en-us/library/dd788532.aspx - Polling SQL Server by using the WCF-SQL Adapter.
    Regards.

Maybe you are looking for